31

app.js在 Express 中,我相信可以通过在我的主文件中执行类似于以下操作来创建全局应用程序设置:

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,但是如果我尝试运行类似的东西(根据:如何访问在 express js 中使用 app.set() 设置的变量):

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

我的问题是:

  1. 我采用的app.set()用于全局设置的方法是否会经常被重复使用是“正确”的方法,如果是的话......
  2. 如何在路由中访问这些设置?
  3. 如果不app.set()经常使用全局设置,我将如何在路由中设置和获取自定义设置?
4

2 回答 2

105

利用req.app.get('ssoHostname')

于 2013-08-09T11:30:01.343 回答
2

app.js文件末尾:

module.exports = app;

然后在routes/login.js

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

现在您可以访问实际app对象并且不会获得ReferenceError.

于 2013-02-11T23:06:20.113 回答