使用以下put mongoose方法,如果我没有填写所有键/值对,我会在邮递员中收到错误!
app.put('/api/users/:user_id', function(req, res) {
users.update({
id_userLogin : req.body.id_userLogin,
userName : req.body.userName,
email : req.body.email,
password : req.body.password,
userNotes: req.body.userNotes
}, function(err, user) {
if (err)
res.send(err);
users.find(function(err, users) {
if (err)
res.send(err)
res.json(users);
});
});
});
如果我放入所有键/值对,但是如果它错过了一对,那么它可以正常工作
"message": "Cast to string failed for value \"undefined\"",
"name": "CastError",
"type": "string"
如果我添加|| ""对于每个参数,我们可以使用所有空参数更新用户。事实上,如果没有更新参数,我们应该保持初始值
任何帮助将不胜感激
答案 0 :(得分:0)
您应检查所有请求参数是否合理,如果格式错误,请丢弃该请求。对于非强制性参数(例如userNotes
),如果未定义,则可以将参数设置为空字符串:
app.put('/api/users/:user_id', function(req, res) {
if (!req.id_userLogin || userName || password) {
return res.send('Malformed request', 400);
}
users.update({
id_userLogin : req.body.id_userLogin,
userName : req.body.userName,
email : req.body.email,
password : req.body.password,
userNotes: req.body.userNotes || ""
}, function(err, user) {
if (err)
res.send(err);
users.find(function(err, users) {
if (err)
res.send(err)
res.json(users);
});
});
});
答案 1 :(得分:0)
我将代码移动到控制器
exports.update = function(req, res, next) {
var id = req.params.id
User.findByIdAndUpdate(id, req.body, function(err, user) {
if (err) {
return next(err);
} else {
res.json(user);
}
});
}
和路线
app.route('/api/users/:id').put(users.update);
解决了这个问题。使用此方法,您可以更新其中一个参数