Verwalten Sie Mongo-Verbindungspools in einem einzigen, eigenständigen Modul. Dieser Ansatz bietet zwei Vorteile. Erstens bleibt Ihr Code modular und lässt sich leichter testen. Zweitens ist man nicht gezwungen, die Datenbankverbindung in das Request-Objekt zu mischen, was NICHT der richtige Ort für ein Datenbankverbindungsobjekt ist. (In Anbetracht der Natur von JavaScript würde ich es für sehr gefährlich halten, irgendetwas in ein Objekt zu mischen, das durch Bibliothekscode konstruiert wurde). Damit brauchen Sie nur ein Modul zu betrachten, das zwei Methoden exportiert. connect = () => Promise
y get = () => dbConnectionObject
.
Mit einem solchen Modul können Sie zunächst eine Verbindung zur Datenbank herstellen
// 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);
});
Während des Fluges kann Ihre Anwendung einfach Folgendes aufrufen get()
wenn es eine DB-Verbindung benötigt.
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
Wenn Sie Ihr DB-Modul wie folgt einrichten, können Sie nicht nur sicherstellen, dass Ihre Anwendung nicht startet, wenn Sie keine Datenbankverbindung haben, sondern Sie haben auch eine globale Möglichkeit, auf Ihren Datenbankverbindungspool zuzugreifen, die einen Fehler auslöst, wenn Sie keine Verbindung haben.
// 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;
}