Tuco
Tuco

Reputation: 722

node.js mongodb closing the connection

I am trying to use node.js with mongodb and following the tutorial at http://howtonode.org/express-mongodb

The code for opening the connection is

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

However i cannot see any connections being closed. But when i see the logs on the mongo console, i can see that are connections which open and they close after some time.

Does the connection close automatically? Will it be a problem when a large no of clients try to access the server? Where should the connection be closed?

Thanks

Tuco

Upvotes: 8

Views: 7503

Answers (3)

Bob
Bob

Reputation: 790

Remember to put the db.close in the last callback that gets executed so the connection is open until all callbacks are finished. Otherwise, it gives an error like

/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)

Upvotes: 0

JohnnyHK
JohnnyHK

Reputation: 312115

In that example application, only a single ArticleProvider object is created for the application to share when serving requests. That object's constructor opens a db connection that won't be closed until the application terminates (which is fine).

So what you should see is that you get a new mongo connection each time you start your app, but no additional connections made no matter how many clients access the server. And shortly after you terminate your app you should see its connection disappear on the mongo side.

Upvotes: 6

Burcu Dogan
Burcu Dogan

Reputation: 9213

node-mongodb-native provides a close method for Db objects and you can close your connection when you are finished by calling it.

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

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

If you don't close your connection, event loop keeps the connection open and your process doesn't exit. If you are building a web server where your process will not be terminated, it's not necessary for you to close the connection.

A better reference for node-mongodb-native can be found on https://github.com/mongodb/node-mongodb-native.

Upvotes: 2

Related Questions