承诺的节点程序没有完成

时间:2014-06-04 18:56:14

标签: node.js mongodb promise mongojs

我不能为我的生活弄清楚为什么没有完成:

var pmongo = require('promised-mongo');
var db = pmongo('mongodb://localhost/builder');
var block_id = '538d097bbb12479d0e9f70ab';

var collection = db.collection('block');
collection.findOne({_id:db.ObjectId(block_id)})
.then(function(result) {
    console.dir(result);
}).done();

它基本上只是挂起。 findOne返回一个promise,我正在调用。奇怪的是,当我关闭数据库(即db.close())时,它就完成了。

我试图通过express来处理这个问题,所以我真的不想关闭数据库。有什么诀窍????

1 个答案:

答案 0 :(得分:5)

MongoDB连接旨在持久化。您可以创建其中一个(或它们的池),然后在整个应用程序中重用该连接。

此持久网络连接将使node.js进程保持活动状态,因此当您要关闭节点进程时,必须手动关闭连接。这是数据库连接的常见模式,如果您连接到MySQL,也会发生同样的事情。

在express.js应用程序中,只需在文件顶部建立一次连接,然后为每个请求重新使用该连接。