【问题标题】:Sending 2 different sets of error messages from the server从服务器发送 2 组不同的错误消息
【发布时间】:2019-11-11 19:24:01
【问题描述】:

我有一个错误数组,来自用户提交注册表单时发生的一些验证。但与表单验证不同的是检查电子邮件地址是否存在。 (使用快速验证器)

这是映射错误消息并发送回客户端的方式:

 const errorMsg = errors.array().map(err => err.msg);
 return res.status(422).send(errorMsg);

然后我有反应

    try {
      const response = await register(user);
      console.log(response);
    } catch (ex) {
      if (ex.response) {
        const errors = ex.response.data;
        console.log(errors);
        this.setState({ errors });
      }
    }

然后,我在客户端上的数组中循环以将错误消息显示给用户。

  {Array.isArray(this.state.errors) && (
    <div className="alert alert-danger">
      {this.state.errors.map((error, index) => (
        <div key={index}>
          {error}
        </div>
      ))}
    </div>
  )}

如果电子邮件地址已被使用,则会显示所有错误,但电子邮件地址除外。错误消息仅显示在控制台中,而不显示在警报中。

这就是我发回错误消息的方式:

  const emailExists = await User.findOne({ email: req.body.email });
  if (emailExists) return res.status(400).send("Email already exists");

我认为我的问题是其他错误在数组中,而唯一的电子邮件不在。

【问题讨论】:

  • 什么时候执行emailExists 检查?同时您尝试拨打register?您使用什么形式的数据库来确定电子邮件是否已经注册?
  • 正确,我在提交注册表的同时检查。我正在使用 Mongo

标签: javascript node.js reactjs


【解决方案1】:

如果您的电子邮件验证,您需要返回包含errors 键的响应对象,其值为字符串数组。例如

const emailExists = await User.findOne({ email: req.body.email });
if (emailExists) return res.status(400).send({ errors: ["Email already exists"] });

【讨论】:

  • 关闭。似乎必须是:if (emailExists) return res.status(400).send(["email exists"]);
猜你喜欢
  • 2023-03-29
  • 2016-07-19
  • 2022-06-29
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多