2014-11-24 34 views
3

一起使用我在使用mongoose在mongodb中更新文檔時遇到問題。Mongoose - findByIdAndUpdate - 無法與req.body

我的模型波紋管:

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 

印刷PARAMS被提供作爲形式數據(密鑰 - 值)。看起來這不起作用,至少對我來說什麼是錯誤的?

+0

是這樣{FIRST_NAME: '米甲',姓氏: '測試'}您req.body? – rahpuser 2014-11-24 15:31:46

+0

是的是req.body。 – Robert 2014-11-24 15:37:45

回答

10

你必須使用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}, function(err, result){ 
     if(err){ 
      console.log(err); 
     } 
     console.log("RESULT: " + result); 
     res.send('Done') 
    }); 
}; 
1

我發現了這個錯誤。請注意,我打電話

req.body.user_id

這裏應該是

req.params.user_id

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

此外,req.body會有鍵值爲文本,並實現爲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') 
}); 

注:更新值發送到蒙戈DB作爲

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

更多參考:Mongoose JS documentation - findByIdAndUpdate

相關問題