这是我的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
$
有什么区别?我该怎么做才能恢复命令行(可能是关闭连接)?
答案 0 :(得分:2)
当订阅了一些事件并且可能发生潜在逻辑时,Node.js不会关闭应用程序。
当你创建MongoClient时,它也会创建EventEmitter,它不会让node.js进程退出,因为它可能会收到一些事件。
如果你想恢复光标 - 那么你几乎没有选择:
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();
});