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

Экспресс: доступ к настройкам app.set() в маршрутах

В Express я убежден, что глобальные настройки приложения можно создать, выполнив что-то похожее на следующее в моем основном файле app.js:

var express = require('express'),
    ...
    login = require('./routes/login');

var app = express();

app.configure(function(){
  ...
  app.set('ssoHostname', 'login.hostname.com');
  ...
});
...
app.get('/login', login.login);
...

теперь в ./routes/login.js, я хотел бы получить доступ к app.settings.ssoHostname, но если я попытаюсь запустить что-либо похожее на (как: Как получить доступ к переменным, установленным с помощью приложения. set() в выражении js):

...
exports.login = function(req, res) {
  var currentURL = 'http://' + req.header('host') + req.url;
  if (!req.cookies.authCookie || !User.isValidKey(req.cookies.authCookie)) {
    res.redirect(app.settings.ssoHostname + '/Login?returnURL=' + encodeURIComponent(currentURL));
  }
};
...

он не распознает app:

ReferenceError: app is not defined

Мои вопросы:

  • Я использовал подход app.set() для глобальных настроек, которые будут часто использоваться повторно для "правильного" способа его выполнения, и если это так...
  • Как получить доступ к этим настройкам в маршрутах?
  • Если вы не используете app.set() для глобальных настроек, которые будут использоваться часто, как бы установить и получить пользовательские настройки в маршрутах?
4b9b3361

Ответ 1

В конце вашего файла app.js:

module.exports = app;

И затем в routes/login.js:

var app = require('../app');

Теперь у вас есть доступ к фактическому объекту app и не получит ReferenceError.

Ответ 2

Используйте req.app.get('ssoHostname')