首页 > 解决方案 > res.status(400) 使我的链接 res.send("this message") 不会出现在客户端

问题描述

我遇到了这个问题,我试图使用我的 Node.js 服务器来回答 res.status(400).send("message")。

如果我删除 res.status,“消息”就会传到我的客户端。一旦我添加了 .status(400),发送部分就不包括在内。

客户端

const handleSubmit = (e) => {
    e.preventDefault();
    const data = {
      user: userName,
      email: email,
      password: password,
    };

    axios
      .post("http://localhost:4040/register", data)
      .then((res) => console.log(res))
      .catch((err) => console.log(err));
  };

服务器端

exports.registerUser = async (req, res, next) => {
  //Validater user data
  const { error } = registerValidation(req.body);
  if (error) return res.status(400).send(error.details[0].message);
  //Check for existing user
  const emailExist = await User.findOne({ email: req.body.email });
  if (emailExist) return res.status(400).send("email already in use");

  //Hashing password
  const hashedPassword = await bcrypt.hash(req.body.password, 10);

  //Upload to database
  const user = new User({
    user: req.body.user,
    email: req.body.email,
    password: hashedPassword,
  });
  try {
    await user.save();
    res.send("User created");
  } catch (err) {
    console.log(err);
    res.status(400).send(err);
  }
};

任何想法为什么在包含状态代码时我的消息会被删除?

最好的问候,奥斯卡

标签: node.jsreactjsexpressaxios

解决方案


当您添加状态 400 时,它将使用 axios 进入 catch 块,当您删除状态时,默认情况下它将被视为 200

所以当状态为 400 时,您需要通过阅读来处理 axios 的 catch 块上的消息err.response.data

查看有关 axios 如何处理超出 2xx 范围的错误和状态码的文档


推荐阅读