Mongoose - findByIdAndUpdate - doesn't work with req.body

后端 未结 3 1977
孤街浪徒
孤街浪徒 2021-02-14 17:57

I have a problem with update documents in mongodb over mongoose.

My model bellow:

var mongoose = require(\'mongoose\');
var bcrypt = require(\'bcrypt-nod         


        
相关标签:
3条回答
  • 2021-02-14 18:20

    I found the mistake. Note that I'm calling

    req.body.user_id

    where should be

    req.params.user_id

    • url is (PUT) http://127.0.0.1:3000/api/users/54724d0fccf520000073b9e3
    0 讨论(0)
  • 2021-02-14 18:33

    Further, the req.body would have key value as Text and realized as String object, inside the code. Thus, it is useful to parse the string into JSON using JSON.parse(req.body.user) - while the user is the key and { first_name: 'Michal', last_name: 'Test' } is the value.

    console.log(req.body);
    var update = JSON.parse(req.body.user);
    var id = req.params.user_id;
    User.findByIdAndUpdate(id, update, function(err, result){
        if(err){
            console.log(err);
        }
        console.log("RESULT: " + result);
        res.send('Done')
    });
    

    Note: the update value is sent to Mongo DB as

    {$set: { first_name : 'Michal`, last_name: 'Test' } 
    

    Further reference: Mongoose JS documentation - findByIdAndUpdate

    0 讨论(0)
  • 2021-02-14 18:35

    You have to use req.params.user_id instead req.body.user_id

    exports.updateUser = function (req, res) {   
        console.log(req.body);
    
        User.findByIdAndUpdate(req.params.user_id,{$set:req.body},{new:true}, function(err, result){
            if(err){
                console.log(err);
            }
            console.log("RESULT: " + result);
            res.send('Done')
        });
    };
    
    0 讨论(0)
提交回复
热议问题