Compartilhamento de conexão do driver Node.js Mongodb-native

main.js

var http = require('http');
var UserModel = require('./models/user.js');
var server = http.createServer(function(req, res){
  UserModel.create({
  }), function(e, o){
    if(e) { console.log(e); } else {
    } console.log(o); }
  });
}).listen(3000);

connections.js

var mongo = require('mongodb');

module.exports = {
    dbMain: new mongo.Db('main', new mongo.Server('127.0.0.1', 27017, { auto_reconnect: true }, {})),
    dbLog: new mongo.Db('log', new mongo.Server('127.0.0.1', 27017, { auto_reconnect: true }, {}))
};

/models/user.js

var mongodb = require('mongodb');
var db = require('./connections.js').dbMain;

module.exports = {
  create: function(newData, callback){
    db.open(function(e, db){
      db.collection('users', function(e, collection){
        collection.insert(newData, callback);
      });
    });
  }
}

Quando eu uso o código acima, o servidor trava com o problema que, na SEGUNDA vez que uma requisição chega, ainda temos a conexão do banco de dados aberta, então vamos adicionar o db.close à nossa função Users.create.

  create: function(newData, callback){
    db.open(function(e, db){
      db.collection('users', function(e, collection){
        collection.insert(newData, function(e, o){
          db.close(); // Voila.
          callback(e, o);
        });
      });
    });
  }

Nesta fase, o servidor ainda pode falhar, por causa de várias conexões abertas, eu não entendo por que ou como isso pode acontecer, mas isso acontece.

Como eu organizo meu projeto em modelos (não quero usar o Mongoose, minha validação é feita em uma camada diferente do modelo, então o Mongoose seria um exagero para mim)? Também como faço para lidar com conexões no projeto?

questionAnswers(2)

yourAnswerToTheQuestion