私はUserモデルを持っています。ここでは、必要に応じてpassword
フィールドを置きます。問題は、password
を送信せずにユーザーを更新しようとすると、password
が必要であるため、エラーが発生するということです。Mongoose - PUTリクエストの.save()エラー
作成時には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"
}
私は、あなたが「当たりセーブ」に基づき検証を無効にすることができるとは思わない:それはどちらかだすべての '(保存のために有効)' (そして 'create()')操作を実行するか、そうでない場合(この場合、必要に応じて手動で検証することができます)。おそらく、['findByIdAndUpdate'](http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate)を調べる価値があります。デフォルトでは、検証は_disabled_です。 – robertklep
説明をありがとう、@robertklep。 'findByIdAndUpdate'に変更するとこのエラーが修正されました。しかし、これは 'Model.pre( 'save'、function())'ミドルウェアでは実行されていません。 – Minoru
ああ、それは動作しません。しかし、呼び出される 'findOneAndUpdate'フックがあります。 – robertklep