Ce n'est peut-être pas la bonne approche, mais je veux ajouter conditionnellement un objet/paramètre à la variable app
à l'intérieur d'un appel middleware expressJS/connectjS.
Étant donné que cette fonction est un rappel, quelle est la meilleure façon/standard d'accéder à app
depuis un appel middleware?
//app.js
var myMiddleware = require('./lib/mymiddleware.js');
...
app.configure( function(){
app.use( myMiddleware.func() );
...
}
if( 'object' !== typeof app.myObject ){
cry( 'about it' );
}
//mymiddleware.js
module.exports.func = function( ){
return function( req, res, next ){
//append app object
//app.myObject = {}
next();
}
};
Notez que ce n'est pas quelque chose que locals
ou settings
sera rendu plus tard, mais quelque chose qui sera utilisé dans les routes et les sockets plus tard dans la chaîne d'exécution.
Les objets de demande ont un champ app
. Utilisez simplement req.app
pour accéder à la variable app
.
En général, je fais ce qui suit.
var myMiddleware = require('./lib/mymiddleware.js')(app);
...
app.configure( function(){
app.use( myMiddleware );
...
}
Et le middleware ressemblerait à ceci ...
module.exports = function(app) {
app.doStuff.blah()
return function(req, res, next) {
// actual middleware
}
}
Vous pouvez également attacher une variable à l'objet global Node, comme ceci:
//some-module.js
global.someVariable = "some value!";
//another-module.js
console.log(global.someVariable); // => "some value!"
Notez que la réponse de Nitzan Shaked (en utilisant req.app) est une bien meilleure approche.
En fait, je ne conseille pas du tout d'utiliser cette solution. Je le laisse uniquement pour être complet, car cela fonctionne, mais c'est une mauvaise pratique dans presque toutes les situations (sauf l'ajout de polyfills).