Gerenciar conjuntos de conexões mongo em um único módulo independente. Essa abordagem oferece dois benefícios. Em primeiro lugar, mantém seu código modular e mais fácil de testar. Em segundo lugar, você não é obrigado a misturar sua conexão com o banco de dados no objeto de solicitação, que NÃO é o local para um objeto de conexão com o banco de dados. (Dada a natureza do JavaScript, consideraria altamente perigoso misturar qualquer coisa a um objeto construído pelo código da biblioteca). Então, com isso, você só precisa considerar um módulo que exporte dois métodos. connect = () => Promise
e get = () => dbConnectionObject
.
Com esse módulo, você pode primeiro conectar-se ao banco de dados
// runs in boot.js or what ever file your application starts with
const db = require('./myAwesomeDbModule');
db.connect()
.then(() => console.log('database connected'))
.then(() => bootMyApplication())
.catch((e) => {
console.error(e);
// Always hard exit on a database connection error
process.exit(1);
});
Quando em vôo, seu aplicativo pode simplesmente ligar get()
quando precisar de uma conexão com o banco de dados.
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
Se você configurar seu módulo db da mesma maneira que a seguir, não apenas terá uma maneira de garantir que seu aplicativo não inicialize, a menos que você tenha uma conexão com o banco de dados, mas também uma maneira global de acessar seu pool de conexão com o banco de dados que irá se você não tiver uma conexão.
// myAwesomeDbModule.js
let connection = null;
module.exports.connect = () => new Promise((resolve, reject) => {
MongoClient.connect(url, option, function(err, db) {
if (err) { reject(err); return; };
resolve(db);
connection = db;
});
});
module.exports.get = () => {
if(!connection) {
throw new Error('Call connect first!');
}
return connection;
}