【发布时间】:2016-04-19 06:56:27
【问题描述】:
我有一个数组,对于每一行我需要做 findIfExist 并保存到 mongodb。代码在这里:
router.post('/namespaceUpload', function(req, res,next) {
var data=req.body;
var totalRows=data.allRows.length;
var conceptObject ={};
var existingConcept;
for (var i=0;i<totalRows;i++){
async.series([
conceptPrepare,
conceptFind,
conceptSave,
], function (err, result) {
console.log('kraj');
res.json('Ok');
});
}
function conceptPrepare(callback){
conceptObject.name= data.allRows[i].name;
conceptObject.user= data.userId;
callback();
}
function conceptFind(callback){
namespaces.find({name: conceptObject.name}, function(err, result) {
if (err)
next(err);
else {
if (result.length==0){
console.log('0');
existingConcept='';
} else {
console.log(result.length);
existingConcept=result[0];
}
}
callback();
});
}
function conceptSave(callback){
var namespace = new namespaces();
if (existingConcept==''){
namespace.name=conceptObject.name;
namespace.description=conceptObject.description;
namespace.lastUpdate.user=conceptObject.user;
namespace.save(function(err) {
if (err)
return next(err);
callback();
})
}
}
所以我使用了 async.series,但只有最后一条记录写入数据库的次数与我拥有的数组成员数一样多。另外,我收到一个错误“发送后无法设置标题”。有什么想法吗?
【问题讨论】:
-
@AlexanderMac 我认为这里更大的问题是“循环控制”并且没有意识到循环完成时发送响应的概念。实际上只是在最后一小时内answered a similar issue。这显示了如何处理流程并仅在循环完成时做出响应。
-
@NeilLunn 是的,看来你是对的。
标签: node.js mongodb express mongoose async.js