Mongoose - PUT请求上的.save()出错

时间:2017-05-22 17:19:58

标签: node.js mongodb mongoose

我有一个用户模型,我根据需要放置了password字段。问题是,当我尝试更新用户而不发送password时,会引发错误,因为它说password是必需的。

如何在创建时将password设置为必需,而不是在更新时?扩展这一点,如何创建一个可以在请求中接收1到4个属性的端点?

PUT端点

exports.putUsuario = function(req, res) {
    Usuario.findById(req.user._id, function(err, usuario) {
        if (err)
            res.send(err);

        if (usuario){
        // Update the existing beer quantity
        usuario.password = req.body.password;
        usuario.nome = req.body.nome;
        usuario.sexo = req.body.sexo;
        usuario.idade = req.body.idade;

        // Save the beer and check for errors
        usuario.save(function(err) {
            if (err)
                res.send(err);

            res.json(usuario);
        });
      }
      else {
        res.json(usuario);
      }
    });
};

错误返回邮递员

{
  "errors": {
    "password": {
      "message": "Path `password` is required.",
      "name": "ValidatorError",
      "properties": {
        "type": "required",
        "message": "Path `{PATH}` is required.",
        "path": "password"
      },
      "kind": "required",
      "path": "password"
    }
  },
  "message": "Usuario validation failed",
  "name": "ValidationError"
}

1 个答案:

答案 0 :(得分:3)

您每次都在设置密码,即使它是空的/未定义的。

在设置之前测试请求正文是否有密码:

if (req.body.password) {
    usuario.password = req.body.password;
}