Node.js Mongodb-conexión de controlador nativo

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

conexiones.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 }, {}))
};

/modelos/usuario.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);
      });
    });
  }
}

Cuando uso el código anterior, el servidor falla con el problema de que, la SEGUNDA vez que llega una solicitud, todavía tenemos la conexión de la base de datos abierta, así que agreguemos db.close a nuestra función 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);
        });
      });
    });
  }

En esta etapa, el servidor todavía puede fallar, debido a que se han abierto varias conexiones, no entiendo por qué o cómo puede suceder esto, pero sucede.

¿Cómo organizo mi proyecto en modelos (no quiero usar Mongoose, mi validación se realiza en una capa diferente, no en el modelo, por lo que Mongoose sería una exageración para mí)? Además, ¿cómo manejo las conexiones en el proyecto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta