我正在使用Node.js + Express与mongodb进行交互。
我正在尝试编写一个mongodb更新函数包装器。
每当我发布帖子请求时,mongo报告“指定了无效的修饰符:$ set undefined”。
任何人都知道我的功能封装器有什么问题吗?或者有更好的方法吗?
我的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的扩展程序“Advance Rest Client”发送的帖子数据:
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"}
]
}
答案 0 :(得分:0)
使用express 3.4.4
和mongodb 1.3.20
运行时效果很好。您使用的是mongodb驱动程序的旧版本吗?
我确定您要做的一件事是在高级REST客户端中正确设置内容类型。如果您使用Payload部分中的Form选项卡,则需要将其设置为application/x-www-form-urlencoded
。
一些一般性指导: 您不希望客户端在选择器和文档中发送。它会向您开放,允许某人发送可能会对您的数据造成一些损害的值。
答案 1 :(得分:0)
我通过使用eval()函数将post数据字符串转换为对象来解决我自己的问题:
var critia = eval("("+req.body.critia+")");
var data = eval("("+req.body.data+")");
希望这个答案能够帮助他人。
干杯