Node.js 猫鼬放法
使用下面的put-mongoose方法,如果我没有填充所有的键/值对,我会在postman中得到一个错误Node.js 猫鼬放法,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,使用下面的put-mongoose方法,如果我没有填充所有的键/值对,我会在postman中得到一个错误 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, pa
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"
如果我为每个参数添加| |,我们可以使用所有空参数更新用户。事实上,如果参数没有更新,我们应该保留初始值
任何帮助都将不胜感激
您应该检查所有请求参数的合理性,如果请求格式不正确,则放弃该请求。对于非强制性参数,例如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);
});
});
});
我将代码移动到控制器
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);
解决了这个问题。使用此方法,您可以更新我看到的一个参数,但如何避免在Post期间最初设置的空强制参数。因为如果我为每个参数添加| |,我们可以用所有空参数更新用户。事实上,如果参数没有更新,我们应该保留初始值。如果模式中的参数不是强制性的,这是正常行为吗?使请求与param一起工作的过程是什么?谢谢