【发布时间】:2017-10-17 00:26:40
【问题描述】:
我正在尝试更新数组内的对象值。我已经完成了方法并在数组中搜索了我想要的元素,并返回了 200。但是当我再次请求时,值返回到原始值(不保存)。
首先是架构:
{
"_id" : "1",
"username" : "a",
"elements" : [{"_id": "22", "name":"bb"}, {"_id":"33", "name": "cc"}]
}
这是我的方法
update = function(req, res) {
User.findById(req.params.id, function (err, user) {
if (!user) {
res.send(404, 'User not found');
}
else{
var array = user.elements;
for (var i = 0; i < array.length; i++) {
if (array[i]._id == "22") {
result = array[i];
if (req.body.name != null) result.name = req.body.name;
result.save(function(err) {
if(!err) {
console.log('Updated');
}
else {
console.log('ERROR: ' + err);
}
res.send(result);
});
break;
}
}
}
});
}
我不知道我做错了什么。我的意思是我简化了一切,但我认为问题出在方法上。
【问题讨论】:
-
您应该只执行一次
res.send(result)。使用Promise.all 或async.js 特别是async.mapSeries 来更新所有元素,然后执行res.send()一次。 -
您还应该使用您的架构编辑您的问题。
-
我相信 res.send 只被调用一次@Mikey -- 虽然很难用缩进来判断。
-
你有没有控制 req.params.id 有什么东西?找到后你有没有尝试解决错误?您的代码在哪里停止?到目前为止,您打印了什么控制台?
-
你确定不要
user.save()。
标签: javascript node.js mongodb