我正在尝试将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控制台上的日志时,我可以看到那些打开的连接,它们会在一段时间后关闭。
连接是否自动关闭?当大量客户试图访问服务器时会出现问题吗?连接应该在哪里关闭?
由于
图科
答案 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)