Gérez les pools de connexions mongo dans un seul module autonome. Cette approche présente deux avantages. Premièrement, il maintient votre code modulaire et plus facile à tester. Deuxièmement, vous n'êtes pas obligé de mélanger votre connexion à la base de données dans votre objet de demande qui n'est PAS l'endroit pour un objet de connexion à la base de données. (Étant donné la nature de JavaScript, je considérerais qu'il est très dangereux de mélanger quoi que ce soit à un objet construit par le code de bibliothèque). Donc, avec cela, il vous suffit de considérer un module qui exporte deux méthodes. connect = () => Promise
et get = () => dbConnectionObject
.
Avec un tel module, vous pouvez d'abord vous connecter à la base de données
// 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);
});
En vol, votre application peut simplement appeler get()
lorsqu'elle a besoin d'une connexion DB.
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
Si vous configurez votre module db de la même manière que ci-dessous, vous aurez non seulement un moyen de vous assurer que votre application ne démarrera pas, sauf si vous disposez d'une connexion à la base de données, mais vous disposez également d'un moyen global d'accéder à votre pool de connexion à la base de données qui entraînera des erreurs si vous n'avez pas de connexion.
// 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;
}