简体   繁体   中英

Express: accessing app.set() settings in routes

In Express, I'm led to believe that global app settings can be created by doing something similar to the following in my main app.js file:

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

now in ./routes/login.js , I'd like to access app.settings.ssoHostname , but if I attempt to run anything similar to (as per: How to access variables set using app.set() in express 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));
  }
};
...

it does not recognize app :

ReferenceError: app is not defined

My questions are:

  1. Is the approach I took of using app.set() for global settings that will be re-used often the "proper" way to do it and if so...
  2. How do I access these settings in routes?
  3. If not using app.set() for global settings to be used often, how would I set and get custom settings in routes?

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

At the end of your app.js file:

module.exports = app;

And then in routes/login.js :

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

Now you have access to the actual app object and won't get a ReferenceError .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM