Подтвердить что ты не робот

Доступ к переменной "app" внутри промежуточного ПО ExpressJS/ConnectJS?

Возможно, это не правильный подход, но я хочу условно добавить объект/параметр в переменную 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, чтобы впоследствии отображаться, но что-то, что будет использоваться в маршрутах и ​​сокетах позже в цепочке выполнения.

4b9b3361

Ответ 1

Объекты запроса имеют поле app. Просто используйте req.app

Ответ 2

Как правило, я делаю следующее.

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

Ответ 3

Вы также можете привязать переменную к глобальному объекту 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) - гораздо лучший подход для этой конкретной ситуации.