8

我正在尝试将 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 控制台上看到日志时,我可以看到这些连接打开并在一段时间后关闭。

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

谢谢

图科

4

3 回答 3

6

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

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

于 2012-09-11T13:19:17.003 回答
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上找到更好的参考。

于 2012-09-11T11:32:25.263 回答
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)
于 2015-05-14T23:12:37.520 回答