Verwalten Sie Mongo-Verbindungspools in einem eigenständigen Modul. Dieser Ansatz bietet zwei Vorteile. Erstens bleibt Ihr Code modular und einfacher zu testen. Zweitens müssen Sie Ihre Datenbankverbindung nicht in Ihrem Anforderungsobjekt verwechseln, das NICHT der Ort für ein Datenbankverbindungsobjekt ist. (Angesichts der Natur von JavaScript würde ich es als sehr gefährlich betrachten, irgendetwas in ein Objekt zu mischen, das aus Bibliothekscode besteht). Damit müssen Sie nur ein Modul berücksichtigen, das zwei Methoden exportiert. connect = () => Promise
und 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 App einfach anrufen, get()
wenn sie 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 Datenbankmodul auf die gleiche Weise wie folgt einrichten, können Sie nicht nur sicherstellen, dass Ihre Anwendung nur dann gestartet wird, wenn Sie über eine Datenbankverbindung verfügen, sondern auch global auf Ihren fehlerhaften Datenbankverbindungspool zugreifen 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;
}