Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬放法_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 猫鼬放法

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

使用下面的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,
        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一起工作的过程是什么?谢谢