如何显示从Node.js API发送到Next.js的验证错误

我已经创建了一个Node.js API,并正在使用Next.js对其进行请求

这是我的Node.js控制器。我正在使用快速验证器进行验证。

如果我正确填写了表格,它将正常工作,并且数据将按预期方式保存在mongo中。但是,当表单未正确填写时,我想将验证错误发送回客户端。如果在控制台中查看,可以在“网络”选项卡中看到错误。

exports.register = async (req,res) => {
  // check if user exists in the database already
  const emailExists = await User.findOne({ email: req.body.email });
  if (emailExists) return res.status(400).send("Email already exists");

  // hash password
  const salt = await bcrypt.genSalt(10);
  // hash the password with a salt
  const passwordhash = await bcrypt.hash(req.body.password,salt);

  // create new user
  var user = new User({
    name: req.body.name,email: req.body.email,password: passwordhash
  });
  try {
    user = await user.save();
    res.send({ user: user._id });
  } catch {
    res.status(400).send(err);
  }
};

在Next.js中,这是发出http请求的代码

  handleSubmit = event => {
    const { name,email,password } = this.state;
    event.preventDefault();
    const user = {
      name,password
    };

    try {
      register(user);
    } catch (ex) {
      console.log(ex);
    }
  };

export const register = async user => {
  const data = await http.post("http://localhost:8000/api/user/register",user);
  console.log(data);
  return data;
};

在控制台中,我只看到以下内容。因此,我正在执行的console.log无法正常工作。

POST http://localhost:8000/api/user/register 422 (Unprocessable Entity)
     

未捕获(承诺)错误:请求失败,状态码为422       在createError(createError.js:16)       在解决时(settle.js:17)       在XMLHttpRequest.handleLoad(xhr.js:59)

z80235578 回答:如何显示从Node.js API发送到Next.js的验证错误

那是因为未运行catch语句,因为该函数本身未引发异常。您应该在函数内部添加错误处理,如下所示:

\r\n
,

我设法使它像这样工作:

try {
  const response = await register(user);
  console.log(response);
} catch (ex) {
  if (ex.response && ex.response.status === 422) {
    const errors = ex.response.data.errors;
    this.setState({ errors });
  }
}
本文链接:https://www.f2er.com/3135389.html

大家都在问