在ExpressJS / ConnectJS中间件内部访问“app”variables?

这可能不是我正确的方法,但是我想在expressJS / connectjS中间件调用中有条件地向appvariables添加对象/参数。

由于此函数是callback函数,因此在中间件调用中访问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(); } }; 

请注意,这不是为localssettings稍后呈现的东西,而是将在路由和套接字后面的执行链中使用的东西。

请求对象有一个app字段。 只需使用req.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 } } 

您也可以将一个variables附加到Node全局对象,如下所示:

 //some-module.js global.someVariable = "some value!"; //another-module.js console.log(global.someVariable); // outputs "some value!" to the cli 

但是请注意,Nitzan Shaked的回答(使用req.app)对于这种特殊情况来说是一个更好的方法。