Estive lendo e lendo e ainda estou confuso sobre qual é a melhor maneira de compartilhar a mesma conexão de banco de dados (MongoDb) em todo o aplicativo NodeJs. Pelo que entendi a conexão deve ser aberta quando o aplicativo é iniciado e reutilizada entre os módulos. Minha ideia atual da melhor maneira é que server.js
(arquivo principal onde tudo começa) se conecte ao banco de dados e crie variáveis de objeto que são passadas para os módulos. Uma vez conectada, esta variável será usada pelo código dos módulos conforme necessário e esta conexão permanecerá aberta. Por exemplo:
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
em seguida, outro módulo se models/user
parece com isso:
Users = function(app, mongo) {
Users.prototype.addUser = function() {
console.log("add user");
}
Users.prototype.getAll = function() {
return "all users " + mongo.dbUsers;
}
}
module.exports = Users;
Agora tenho uma sensação horrível de que isso é errado, então há algum problema óbvio com essa abordagem e, se houver, como torná-la melhor?
module.exports = mongoist(connectionString);
. (Leia sobre connectionString
no Manual do MongoDB.)