5

我一生都无法弄清楚为什么这没有完成:

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 返回一个承诺,我正在调用完成。奇怪的是,当我在 then 中关闭数据库(即 db.close())时,它完成了。

我试图最终通过快递处理这个问题,所以我真的不想关闭数据库。什么套路????

4

1 回答 1

6

MongoDB 连接旨在保持持久性。您创建其中一个(或其中一个池),然后在整个应用程序中重复使用该连接。

这种持久的网络连接会让node.js进程保持活跃,所以当你想关闭node进程时,你必须手动关闭连接。这是数据库连接的常见模式,如果您连接到 MySQL,也会发生同样的事情。

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

于 2014-06-05T10:09:59.910 回答