2012-09-11 142 views
8

我想使用MongoDB的与node.js的连接和下面的教程在http://howtonode.org/express-mongodbnode.js的MongoDB的收盘

代码用于打开连接

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

但是我看不到任何连接正在关闭。 但是当我在mongo控制台上看到日志时,我可以看到这些连接打开并在一段时间后关闭。

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

感谢

图科

回答

6

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

因此,您应该看到的是,每次启动应用程序时都会获得新的mongo连接,但无论有多少客户端访问服务器,都不会创建其他连接。在你终止你的应用之后不久,你应该看到它的连接在Mongo端消失。

2

node-mongodb-native提供了Db的对象接近的方法,当你调用它完成,你可以关闭你的连接。

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

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

如果您不关闭连接,事件循环会保持连接处于打开状态,并且您的进程不会退出。如果您正在构建一个Web服务器,您的进程不会被终止,那么您不必关闭连接。

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

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)