【问题标题】:Get Mongoose validation error message in React在 React 中获取 Mongoose 验证错误消息
【发布时间】:2021-01-29 01:03:31
【问题描述】:

我正在尝试使用 Mongoose 验证用户创建/编辑等,并在我的前端取回消息,但我得到的只是

POST http://192.168.0.11:3000/users/create 400 (Bad Request)
CreateUser.jsx:48 Error: Request failed with status code 400
    at e.exports (createError.js:16)
    at e.exports (settle.js:17)
    at XMLHttpRequest.d.onreadystatechange (xhr.js:61)

我的用户架构:

const User = new mongoose.Schema({
  Name: {
    type: String,
    required: "Username is required for a user!",
    minlength: 4,
    maxlength: 16,
  },
  Password: {
    type: String,
    required: "Password is required for a user!",
    minlength: 4,
    maxlength: 20,
  },
  Role: {
    type: String,
    required: "User must have a role!",
    enum: ["Operator", "Admin"],
  }
});

在节点中:

router.post("/create", async (req, res) => {
  try {
    const user = new User({
      Name: req.body.Name,
      Password: req.body.Password,
      Robots: req.body.Robots,
      Role: req.body.Role,
    });

    await user.save();
    res.send("success");
  } catch (e) {
    console.log(e);
    res.status(400).json("Error" + e);
  }
});

在 React 中:

try {  
  const userCreated = await axios.post(`${ENDPOINT}/users/create`, user);
  console.log(userCreated);
} catch (e) {
  console.log(e);
}

如果成功,我会返回“成功”消息,否则我会不断收到 POST 400 bad request 消息。

如果我在节点中 console.log 它确实会引发验证失败错误,但我无法在前端恢复错误。

【问题讨论】:

  • 您正在使用res.json,但是当您在后端收到错误时将其传递给一个字符串。您使用res.send 发送的成功消息。也许这会给您带来一些问题。
  • 改用res.status(400).send('error ',e)
  • @MomoSetti 它说这种方法已被弃用。我也尝试过 send(e) 但这也没有帮助,我仍然在前端遇到同样的错误。

标签: node.js reactjs mongoose axios


【解决方案1】:

我用我的一个快速样板 repo here 尝试了几乎相同的示例,我能够返回这样的 Mongo 验证错误。

用户模型的一部分

first_name: {
      type: String,
      trim: true,
      minlength: 4,
}

控制器

try {
   const user = await new User(req.body);
   const newUser = await user.save();
   res.status(201).json({ status: true, newUser });

} catch (error) {
   console.log(error);
   res.status(400).json(error);
}

我收到的错误响应是 400 Bad Request,因此您可以检查您的 React 应用的 catch 中是否有 name == 'ValidationError',也可以使用 errors 与该字段一起显示。

{
    "errors": {
        "first_name": {
            "message": "Path `first_name` (`a`) is shorter than the minimum allowed length (4).",
            "name": "ValidatorError",
            "properties": {
                "message": "Path `first_name` (`a`) is shorter than the minimum allowed length (4).",
                "type": "minlength",
                "minlength": 4,
                "path": "first_name",
                "value": "a"
            },
            "kind": "minlength",
            "path": "first_name",
            "value": "a"
        }
    },
    "_message": "User validation failed",
    "message": "User validation failed: first_name: Path `first_name` (`a`) is shorter than the minimum allowed length (4).",
    "name": "ValidationError"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2017-05-05
    • 2013-06-08
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多