mongoclient.connection不会将光标返回到命令行

时间:2013-09-11 16:24:08

标签: node.js mongodb node-mongodb-native

这是我的test1.js

console.log("foo");

当我运行test1.js时,我得到了命令行

$ node test2.js
foo
$

这是我的test2.js,使用MongoDbClient

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://local.host/test?w=1", function(err, db) {
   console.log("foo");
});

但是当我运行test2.js时,我必须按CTRL-C才能返回命令行

$ node test3.js
foo
^C
$

有什么区别?我该怎么做才能恢复命令行(可能是关闭连接)?

1 个答案:

答案 0 :(得分:2)

当订阅了一些事件并且可能发生潜在逻辑时,Node.js不会关闭应用程序。

当你创建MongoClient时,它也会创建EventEmitter,它不会让node.js进程退出,因为它可能会收到一些事件。

如果你想恢复光标 - 那么你几乎没有选择:

  1. 很好地杀死所有EventEmitters和空闲计时器,然后间隔和进程将退出。但很难实现。
  2. 只需致电:process.exit(0),这将很好地关闭流程。
  3. 同时检查refunref的计时器功能(间隔,超时):http://nodejs.org/api/timers.html#timers_unref

    对于MongoClient,只需在完成后关闭数据库连接:

    var MongoClient = require('mongodb').MongoClient;
    MongoClient.connect('mongodb://localhost:27017/testdb', function(err, db) {
      // do your stuff
    
      // when you are done with database, make sure to respect async queries:
      db.close();
    });