即使提供了字段且非空,也会出现Mongoose ValidatorError

时间:2022-09-10 19:16:04

I got an "interesting" issue when trying to add a new user using my API... I get the following error, even though the required fields are submitted. I can't really figure out why. I've added the relevant part of the code. Thanks.

尝试使用我的API添加新用户时出现“有趣”问题...即使提交了必填字段,我也会收到以下错误。我无法弄清楚原因。我添加了代码的相关部分。谢谢。

$ curl -v http://localhost:3000/api/users --data "{ 'user_name':'xsa', 'email':'foo@bar.baz' }"

The error:

错误:

{"errors":{"email":{"message":"Path `email` is required.","name":"ValidatorError","properties":{"message":"Path `{PATH}` is required.","type":"required","path":"email"},"kind":"required","path":"email","$isValidatorError":true}},"_message":"User validation failed","message":"User validation failed: email: Path `email` is required.","name":"ValidationError"}

models/user.js

车型/ user.js的

[...]

user_name: {
    type: String,
    lowercase: true,
    required: true,
    index: {
      unique: true
    },
    trim: true,
    min: 3,
    max: 8
  },
  email: {
    type: String,
    lowercase: true,
    required: true
  },

[...]

routes/user.js

路线/ user.js的

router.post('/users', (req, res, err) => {
  var user = new User(req.body);

  user.save()
    .catch((err) => {
      res.send(err);
    });
});

1 个解决方案

#1


0  

You have this:

你有这个:

var user = new User(req.body);

Change to this:

改为:

var user = new User();
user.name - req.body.name;
user.email = req.body.email;

Edit: Here is HTML form:

编辑:这是HTML表单:

<div>

    <form method="post" action="/users/save">

        <div>
            <label>Name</label>
            <input type='text' required name="userName"/>
        </div>

        <div>
            <label>Email</label>
            <input type='text' required name="email"/>
        </div>

    <input type="submit" class="submit btn btn-primary" value="Save">

    </form>
</div>

When user presses submit button, your req.body is send neatly to your router. You will have req.body.userName and req.body.email waiting for you.

当用户按下提交按钮时,您的req.body将整齐地发送到您的路由器。您将有req.body.userName和req.body.email等着您。

I removed a lot of CSS to make it easier to read. Apply your own styling as desired.

我删除了很多CSS以便于阅读。根据需要应用您自己的样式。

#1


0  

You have this:

你有这个:

var user = new User(req.body);

Change to this:

改为:

var user = new User();
user.name - req.body.name;
user.email = req.body.email;

Edit: Here is HTML form:

编辑:这是HTML表单:

<div>

    <form method="post" action="/users/save">

        <div>
            <label>Name</label>
            <input type='text' required name="userName"/>
        </div>

        <div>
            <label>Email</label>
            <input type='text' required name="email"/>
        </div>

    <input type="submit" class="submit btn btn-primary" value="Save">

    </form>
</div>

When user presses submit button, your req.body is send neatly to your router. You will have req.body.userName and req.body.email waiting for you.

当用户按下提交按钮时,您的req.body将整齐地发送到您的路由器。您将有req.body.userName和req.body.email等着您。

I removed a lot of CSS to make it easier to read. Apply your own styling as desired.

我删除了很多CSS以便于阅读。根据需要应用您自己的样式。