猫鼬 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);

这解决了问题。使用此方法,您可以更新其中一个参数