【问题标题】:Mongoose - findByIdAndUpdate - doesn't work with req.bodyMongoose - findByIdAndUpdate - 不适用于 req.body
【发布时间】:2015-01-22 08:41:51
【问题描述】:

我在通过 mongoose 更新 mongodb 中的文档时遇到问题。

我的模型如下:

var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');

var UserSchema = new mongoose.Schema({
    first_name:{
        type: String
    },
    last_name:{
        type: String
    },
    email:{
        type: String,
        unique: true,
        required: true
    },
    password:{
        type: String,
        required: true
    },
    is_active:{
        type: Boolean,
        default: true
    },
    last_login:{
        type: Date
    }
});
module.exports = mongoose.model('User', UserSchema);

控制器放函数如下:

exports.updateUser = function (req, res) {
    console.log(req.body);
    User.findByIdAndUpdate(req.body.user_id, {$set:req.body}, function(err, result){
        if(err){
            console.log(err);
        }
        console.log("RESULT: " + result);
    });
    res.send('Done')
}

控制台输出:

Listening on port 3000... { first_name: 'Michal', last_name: 'Test' } 
PUT /api/users/54724d0fccf520000073b9e3 200 58.280 ms - 4

打印的参数以表单数据(键值)的形式提供。看起来至少对我不起作用,知道这里有什么问题吗?

【问题讨论】:

  • 这是 { first_name: 'Michal', last_name: 'Test' } 你的 req.body 吗?

标签: node.js mongodb express mongoose


【解决方案1】:

您必须使用req.params.user_id 而不是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')
    });
};

【讨论】:

【解决方案2】:

此外,req.body 的键值为 Text,并在代码中实现为 String 对象。因此,使用 JSON.parse(req.body.user) 将字符串解析为 JSON 很有用 - 而 user 是键,{ first_name: 'Michal', last_name: 'Test' } 是值。

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')
});

注意:update 值以

的形式发送到 Mongo DB
{$set: { first_name : 'Michal`, last_name: 'Test' } 

进一步参考:Mongoose JS documentation - findByIdAndUpdate

【讨论】:

    【解决方案3】:

    我发现了错误。请注意,我正在调用

    req.body.user_id

    应该在哪里

    req.params.user_id

    • 网址是(PUT) http://127.0.0.1:3000/api/users/54724d0fccf520000073b9e3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-26
      • 2021-10-23
      • 2020-04-11
      • 2020-08-12
      • 2021-01-28
      • 2017-02-07
      • 2017-02-01
      • 2014-02-19
      相关资源
      最近更新 更多