完成Mongo写入后,节点csv调用挂起

时间:2013-10-15 01:27:33

标签: node.js mongodb csv

我正在使用Node加载CSV文件,然后将其写入MongoDB数据库。它实际上工作,但脚本没有退出!这是核心:

function commute_process(csvstr, col_commute) {
    csv()
    .from(csvstr, {columns: true})
    .transform(function(row) {
        // unimportant stuff
        return row;
    })
    .on('record', function(row) {
        cleanedrow = // unimportant
        console.log(cleanedrow);
        col_commute.insert(cleanedrow, {w:1}, function(err, result) { assert.equal(null, err); });
    })
    .on('end', function(count){
      console.log('Number of lines: '+count);
    });

    console.log("end of commute_process()")
};

csvstr是一个很大的字符串。 col_commute是一个Mongo集合。每行的日志正常输出。 end日志按预期发生(5000行)。数据库具有正确的数据。而且......就是这样。 “commute_process()”行的结束不会发生。

为什么不呢?

2 个答案:

答案 0 :(得分:1)

因为mongo连接可能会保持打开状态。只需在结束事件中触发连接实例的close方法。然后,如果它仍然没有关闭运行process.exit()

答案 1 :(得分:1)

解决方案是添加一个回调来关闭Mongo连接。所以:

commute_process(body, col_commute, function() {db.close();});

然后,在那个功能中:

.on('end', function(count){
  console.log('Number of lines: '+count);
  cb();
});