How to reuse mongodb connection in node.js
node-mongodb-native, node.js
Solution
You can connect once, and then reuse it as many times as you want:
var mongodb = require('mongodb');
var events = require('events');
var event = new events.EventEmitter();
var access = new mongodb.Server(host, port, { });
var client = null;
new mongodb.Db('YOUR DATABASE', access, { safe: true, auto_reconnect: true }).open(function (err, c) {
if (!err) {
client = c;
console.log('database connected');
event.emit('connect');
} else {
console.log('database connection error', err);
event.emit('error');
}
});
exports.get = function(fn) {
if(client) {
fn(client);
} else {
event.on('connect', function() {
fn(client);
});
}
};
And then reuse it:
var db = require('./db');
var items;
db.get(function(client) {
items = new mongodb.Collection(client, 'collection');
});
// then anywhere in your code
db.get(function() {
// items.find({ ...
});
Problem
I'm using node-mongodb-native driver with mongodb to write a website. I have a question about how to open mongodb connection once, then use it in collection name users in `user.js` and collection name posts in `comment.js` I want to open db connection in `db.js` then to insert / save data for users and posts collection Currently code,my `db.js` ``` var Db = require('mongodb').Db, Connection = require('mongodb').Connection, Server = require('mongodb').Server; module.exports = new Db( 'blog', new Server('localhost', Connection.DEFAULT_PORT, {auto_reconnect: true}) ); ``` I used `db.js` in `user.js` as follow ``` var mongodb = require('./db'); function User(user){ this.name = user.name; this.password = user.password; this.email = user.email; }; module.exports = User; User.prototype.save = function(callback) {//save user information //document to save in db var user = { name: this.name, password: this.password, email: this.email }; mongodb.close(); //open mongodb database mongodb.open(function(err, db){ if(err){ return callback(err); } //read users collection db.collection('users', function(err, collection){ if(err){ mongodb.close(); return callback(err); } //insert data into users collections collection.insert(user,{safe: true}, function(err, user){ mongodb.close(); callback(err, user);//success return inserted user information }); }); }); }; ``` and `comment.js` ``` var mongodb = require('./db'); function Comment(name, day, title, comment) { this.name = name; this.day = day; this.title = title; this.comment = comment; } module.exports = Comment; Comment.prototype.save = function(callback) { var name = this.name, day = this.day, title = this.title, comment = this.comment; mongodb.open(function (err, db) { if (err) { return callback(err); } db.collection('posts', function (err, collection) { if (err) { mongodb.close(); return callback(err); } //depend on name time and title add comment collection.findAndModify({"name":name,"time.day":day,"title":title} , [ ['time',-1] ] , {$push:{"comments":comment}} , {new: true} , function (err,comment) { mongodb.close(); callback(null); }); }); }); }; ```