我想更新數組內的對象值。我已經完成了該方法並搜索了我想要的數組中的元素,並返回了200.但是在我做另一個請求時,該值返回到原始值(不保存)。節點js不保存方法PUT
這一切首先是架構:
{
"_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(結果)'一次。使用[Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)或[async.js](http://caolan.github。 io/async /)特別是[async.mapSeries](http://caolan.github.io/async/docs.html#mapSeries)首先更新所有元素,然後執行'res.send()'一次。 – Mikey
您還應該使用您的模式編輯您的問題。 – Mikey
我相信res.send只會被調用一次@Mikey - 雖然很難說與縮進。 –