単一の自己完結型モジュールでmongo接続プールを管理します。このアプローチには2つの利点があります。まず、コードをモジュール化し、テストを容易にします。次に、データベース接続オブジェクトの場所ではないリクエストオブジェクトでデータベース接続を混在させる必要はありません。(JavaScriptの性質を考えると、ライブラリコードによって構築されたオブジェクトに何かを混在させることは非常に危険だと思います)。したがって、2つのメソッドをエクスポートするモジュールを検討するだけで済みます。connect = () => Promise
とget = () => dbConnectionObject
。
このようなモジュールを使用すると、最初にデータベースに接続できます
// 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);
});
処理中get()
は、DB接続が必要なときにアプリで呼び出すことができます。
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
以下と同じ方法でdbモジュールを設定すると、データベース接続がない限り、アプリケーションが起動しないようにする方法だけでなく、エラーになるデータベース接続プールにアクセスするグローバルな方法も利用できます。接続がない場合。
// 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;
}