我在使用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
打印的参数以表格数据(键值)的形式提供。看起来至少对我来说不知道这里有什么问题吗?
答案 0 :(得分:12)
您必须使用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 :(得分:1)
我发现了错误。请注意,我正在呼叫
req.body.user_id
应该在哪里
req.params.user_id
(PUT) http://127.0.0.1:3000/api/users/54724d0fccf520000073b9e3
答案 2 :(得分:0)
此外,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')
});
注意:更新值将作为
发送到Mongo DB{$set: { first_name : 'Michal`, last_name: 'Test' }