我正在使用Node.js+Express与mongodb进行交互。
我正在尝试编写一个mongodb更新函数包装器。
每当我发出post请求时,mongo都会报告"指定的修饰符无效:未定义的$set"。
有人知道我的函数包装器出了什么问题吗?或者有更好的方法吗?
我的update_personal_info.js看起来是这样的:
exports.update_personal_info = function(req, res){
var critia = req.body.critia;
var data = req.body.data;
db.collection('accounts', function(err, collection) {
collection.update(critia, data, function (err, doc) {
if (err) {
res.send("There's problem updating the db");
}
});
});
}
我使用的帖子数据通过Chrome的扩展"高级休息客户端"发送:
critia={"_id": "user_1234"}
data={$set: {"password": "44444444"}}
我的app.js看起来是这样的:
app.post('/1',update_personal_info);
账户集合如下所示:
{
"_id": "user_1234",
"name": "John Chu",
"password": "111111",
"address": [
{"old": "123 seattle st. WA. 123456"},
{"new": "123 new york st. DC. 123456"}
]
}
使用express 3.4.4
和mongodb 1.3.20
,当我运行它时,它运行得很好。你使用的是mongodb驱动程序的旧版本吗?
我确信您正在做的一件事是在Advanced REST Client中正确设置内容类型。如果使用Payload部分中的Form选项卡,则需要将其设置为application/x-www-form-urlencoded
。
一些一般指导:您不希望客户端发送选择器和文档。它打开了你的大门,允许有人发送可能对你的数据造成一些损害的值。
我已经解决了自己的问题,通过使用eval()函数将post数据字符串转换为对象:
var critia = eval("("+req.body.critia+")");
var data = eval("("+req.body.data+")");
希望这个答案能帮助其他人。
干杯