访问ExpressJS / ConnectJS中间件内的“app”变量?

时间:2013-09-18 18:56:20

标签: node.js express middleware

这可能不是我的正确方法,但我想有条件地将一个对象/参数添加到expressJS / connectjS中间件调用中的app变量。

由于此函数是回调函数,从中间件调用中访问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稍后要呈现的内容,而是稍后将在执行链中用于路由和套接字的内容。

3 个答案:

答案 0 :(得分:102)

请求对象具有app字段。只需使用req.app即可访问app变量。

答案 1 :(得分:10)

一般来说,我会做以下事情。

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
  }
}

答案 2 :(得分:3)

您还可以将变量附加到Node全局对象,如下所示:

//some-module.js
global.someVariable = "some value!";

//another-module.js
console.log(global.someVariable); // => "some value!"

请注意,Nitzan Shaked的答案(使用req.app)是一种更好的方法。

事实上,我根本不建议使用此解决方案。我只是为了完整性而离开它,因为它有效,但在几乎所有情况下都是不好的做法(除了添加polyfills)。