node.js mongodb关闭连接

时间:2012-09-11 07:03:34

标签: node.js mongodb

我正在尝试将node.js与mongodb一起使用并遵循http://howtonode.org/express-mongodb上的教程

打开连接的代码是

ArticleProvider = function(host, port) {
 this.db= new Db('node-mongo-blog', new Server(host, port, {auto_reconnect: true}, {}));
 this.db.open(function(){});
};

但是我看不到任何连接被关闭。 但是当我看到mongo控制台上的日志时,我可以看到那些打开的连接,它们会在一段时间后关闭。

连接是否自动关闭?当大量客户试图访问服务器时会出现问题吗?连接应该在哪里关闭?

由于

图科

3 个答案:

答案 0 :(得分:6)

在该示例应用程序中,只有一个ArticleProvider对象被创建,供应用程序在提供请求时共享。该对象的构造函数打开一个数据库连接,该连接在应用程序终止之前不会被关闭(这很好)。

所以您应该看到的是,每次启动应用程序时都会获得一个新的mongo连接,但无论有多少客户端访问服务器,都不会进行其他连接。在您终止应用程序后不久,您应该会看到它的连接在mongo端消失。

答案 1 :(得分:2)

node-mongodb-native为Db对象提供了一种关闭方法,您可以通过调用它来关闭连接。

var that = this;
this.db.open(function(){
    // do db work here

    // close the connection
    that.db.close();
});

如果不关闭连接,则事件循环会保持连接打开,并且您的进程不会退出。如果您正在构建一个不会终止进程的Web服务器,则无需关闭连接。

可以在https://github.com/mongodb/node-mongodb-native上找到node-mongodb-native的更好参考。

答案 2 :(得分:0)

请记住将db.close放在最后一个执行的回调中,这样连接才会打开,直到所有回调都完成。否则,它会出现类似

的错误
/usr/local/lib/node_modules/mongodb/lib/utils.js:97
    process.nextTick(function() { throw err; });
                                        ^
Error
    at Error.MongoError (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:13:17)
    at Server.destroy (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:629:47)
    at Server.close (/usr/local/lib/node_modules/mongodb/lib/server.js:344:17)
    at Db.close (/usr/local/lib/node_modules/mongodb/lib/db.js:267:19)