这是我的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
$
有什么不同? 和我应该怎么做才能在命令行后面(密切联系,也许)?
Node.js的不会关闭应用程序,同时有一些事件订阅和潜在的逻辑可能发生。
当你创建MongoClient它创建EventEmitter以及和它不会让Node.js的进程退出,因为它可能可以接收一些事件。
如果你想获得光标回来 - 那么你有几种选择:
- 奈斯利杀死所有EventEmitters和空转定时器和间隔时间和过程将退出。 但是这是很难实现的。
- 只要致电:
process.exit(0)
这将很好地关闭进程。
以及检查ref
和unref
定时器功能(间隔,超时): 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();
});