41

这可能不是我正确的方法,但我想有条件地将对象/参数添加到appexpressJS/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();
    }
  };

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

4

3 回答 3

113

请求对象有一个app字段。只需使用req.app来访问app变量。

于 2013-09-18T19:00:48.267 回答
11

通常我会执行以下操作。

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
  }
}
于 2013-09-18T19:03:45.767 回答
4

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

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

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

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

事实上,我根本不建议使用这个解决方案。我只是为了完整性而留下它,因为它可以工作,但在几乎所有情况下都是不好的做法(添加 polyfill 除外)。

于 2015-08-12T06:36:52.643 回答