我在控制器中使用此代码更新数据库中的一个或多个项目。
update: function(req, res) {
var ids = new Array();
for(var i =0;i<req.body.data.length;i++){
ids.push(req.body.data[i]._id);
}
ids.forEach(function (id,index) {
dayModel.findOne({_id: id}, function(err, day){
if(err) {
console.log("error");
}
if(day) {
day.worker = req.body.data[index].lav_mail ?
req.body.data[index].lav_mail : day.worker;
day.date = req.body.data[index].date ?
req.body.data[index].date : day.date;
day.hours = req.body.data[index].ore ?
req.body.data[index].ore : day.hours;
day.project = req.body.data[index].progetto ?
req.body.data[index].progetto : day.project;
day.activity = req.body.data[index].attività ?
req.body.data[index].attività : day.activity;
try {
day.save(function(err, day){
//return res.json(day);
});
}catch(ex){
console.log(ex.stack);
}
}
});
});
}
然后在路由器
router.put('/', function(req, res) {
dayController.update(req, res);
});
当用户拨打大量电话时,NodeJS会崩溃。
你有什么建议吗?
答案 0 :(得分:1)
虽然您可以使用async
模块,但有一种方法可以使用它。
以下代码将一个接一个地更新一条记录,完成后将返回一系列天数。
update: function(req, res) {
var days = [];
updateOne();
function updateOne(){
// get one data object from array
var data = req.body.data.pop();
dayModel.findOne({_id: data.id}, function(err, day){
if(err) {
console.log("error");
}
if(day) {
...
day.save(function(err, day){
days.push(day);
// if no more data then return
if(!req.body.data.lenght) return res.json(days);
// otherwise update another one
updateOne();
});
}
});
}
}