猫鼬 Put 方法 CastError
Mongoose Put method CastError
使用以下 put mongoose 方法,如果我没有填写所有 key/value 对,我会在邮递员中收到错误!
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);
});
});
});
如果我放入所有 key/value 对,它工作正常,但如果它遗漏一对,我得到
"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);
这解决了问题。使用此方法,您可以更新其中一个参数
使用以下 put mongoose 方法,如果我没有填写所有 key/value 对,我会在邮递员中收到错误!
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);
});
});
});
如果我放入所有 key/value 对,它工作正常,但如果它遗漏一对,我得到
"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);
这解决了问题。使用此方法,您可以更新其中一个参数