J'inclus généralement un fichier d'utilitaires de projet qui contient un certain nombre de ces éléments, juste pour faciliter les choses. Il fonctionne comme un pseudo global, mais sans la plupart des problèmes habituels que les globals impliquent.
Par exemple,
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);
}
En utilisant une fonction initialize() asynchrone, vous pouvez être sûr que toutes les connexions à la base de données, les E/S de fichiers, etc., sont effectuées avant de démarrer le serveur.