これは適切なアプローチではないかもしれませんが、オブジェクト/パラメーターを条件付きでapp
変数に追加して、expressJS/connectjSミドルウェア呼び出し内に入れたいと思います。
この関数はコールバックなので、ミドルウェア呼び出し内からapp
にアクセスするための標準/最良の方法は何ですか?
//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();
}
};
これはlocals
またはsettings
を後でレンダリングするためのものではなく、後で実行チェーンのルートおよびソケットで使用されるものです。
リクエストオブジェクトにはapp
フィールドがあります。単にreq.app
は、app
変数にアクセスします。
一般的に私は次のことを行います。
var myMiddleware = require('./lib/mymiddleware.js')(app);
...
app.configure( function(){
app.use( myMiddleware );
...
}
そしてミドルウェアはこのようになります...
module.exports = function(app) {
app.doStuff.blah()
return function(req, res, next) {
// actual middleware
}
}
次のように、Nodeグローバルオブジェクトに変数をアタッチすることもできます。
//some-module.js
global.someVariable = "some value!";
//another-module.js
console.log(global.someVariable); // => "some value!"
Nitzan Shakedの回答(req.appを使用)の方がはるかに優れていることに注意してください。
実際、このソリューションを使用することはお勧めしません。完全に機能するため、そのままにしておきますが、(ポリフィルの追加を除いて)ほとんどすべての状況で悪い習慣です。