He estado leyendo y leyendo y todavía estoy confundido sobre cuál es la mejor manera de compartir la misma conexión de base de datos (MongoDb) en toda la aplicación NodeJs. Según tengo entendido, la conexión debe estar abierta cuando se inicia la aplicación y reutilizarse entre módulos. Mi idea actual de la mejor manera es que server.js
(el archivo principal donde comienza todo) se conecta a la base de datos y crea una variable de objeto que se pasa a los módulos. Una vez conectada, esta variable será utilizada por el código de los módulos según sea necesario y esta conexión permanece abierta. P.ej:
var MongoClient = require('mongodb').MongoClient;
var mongo = {}; // this is passed to modules and code
MongoClient.connect("mongodb://localhost:27017/marankings", function(err, db) {
if (!err) {
console.log("We are connected");
// these tables will be passed to modules as part of mongo object
mongo.dbUsers = db.collection("users");
mongo.dbDisciplines = db.collection("disciplines");
console.log("aaa " + users.getAll()); // displays object and this can be used from inside modules
} else
console.log(err);
});
var users = new(require("./models/user"))(app, mongo);
console.log("bbb " + users.getAll()); // not connected at the very first time so displays undefined
entonces otro módulo se models/user
ve así:
Users = function(app, mongo) {
Users.prototype.addUser = function() {
console.log("add user");
}
Users.prototype.getAll = function() {
return "all users " + mongo.dbUsers;
}
}
module.exports = Users;
Ahora tengo la horrible sensación de que esto está mal, ¿hay algún problema obvio con este enfoque y, de ser así, cómo mejorarlo?
module.exports = mongoist(connectionString);
. (Lea sobre esto connectionString
en el Manual de MongoDB.)