私は通常、簡単にするために、これらの多くのものを含むプロジェクトユーティリティファイルを含めます。これは疑似グローバルとして機能しますが、グローバルに伴う通常の問題の多くはありません。
たとえば、
projectUtils.js
module.exports = {
initialize: function(next){
// initialization actions, there can be many of these
this.initializeDB(next);
},
initializeDb: function(next){
mongoClient.open(function(err, mongoClient) {
if(err) return next(err);
module.exports.db = mongoClient.db(DB);
next();
});
}
}
app.js
var projectUtils = require('projectUtils');
// (snip)
projectUtils.initialize(function(err) {
if(err) throw err; // bad DB initialization
// After this point and inside any of your routes,
// projectUtils.db is available for use.
app.listen(port);
}
非同期のinitialize()関数を使用すると、サーバーを起動する前に、すべてのデータベース接続、ファイルI/Oなどが確実に実行されます。