nodejs:异步并查找问题

时间:2016-04-18 22:50:37

标签: node.js mongodb express mongoose async.js

我有一个数组,每行我需要做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,但只有最后一条记录在数据库中编写的次数与我拥有的数组成员的次数相同。另外,我收到错误&#34;发送后无法设置标头。&#34;有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您收到Can't set headers after they are sent错误消息是因为您不允许多次返回smtg例如:res.send,res.render但是 >循环,它变为 totalRows 次 尝试在循环结束时返回一个值