2013-02-11 26 views
23

Ekspresowe dostępu app.set(), ja skłonni uwierzyć, że globalne ustawienia aplikacji mogą być tworzone przez robi coś podobnego do następującego w moim głównym app.js pliku:ekspresowe: Ustawienia w trasach

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

teraz w ./routes/login.js, chciałbym, aby uzyskać dostęp app.settings.ssoHostname, ale jeśli próbuję uruchomić coś podobnego do (zgodnie z: 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)); 
    } 
}; 
... 

nie rozpoznaje app:

ReferenceError: app is not defined 

Moje pytania są następujące:

  1. Czy podejście Wziąłem korzystania app.set() dla ustawień globalnych, które będą ponownie wykorzystywane często „właściwego” sposób to zrobić, a jeśli tak ...
  2. Jak uzyskać dostęp do tych ustawień na trasach?
  3. Jeśli nie używasz app.set(), aby często używane były ustawienia globalne, w jaki sposób ustawiłbym i uzyskałam własne ustawienia na trasach?
+3

Można użyć req.app.settings.ssHostName –

+3

req.app.settings jest wielki krzyk .. po prostu to, czego szukasz. Dzięki @Hector Correa – iancrowther

Odpowiedz

6

Na końcu pliku app.js:

module.exports = app; 

A potem w routes/login.js:

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

Teraz masz dostęp do aktualnego app obiektu i nie dostanie ReferenceError.

+0

Excellent! Dziękuję Ci. – Scott

+17

Nigdy tego nie rób, ponieważ zakłada się, że ta sama aplikacja jest używana we wszystkich aplikacjach. – graffic

+1

Jeśli chcę uzyskać dostęp do app.locals z innego pliku (np. Routes/blah.js), jaka jest najlepsza praktyka? – sports

82

Zastosowanie req.app.get('ssoHostname')

+2

To działa dla mnie. Używam config.json z wartościami ustawień aplikacji dla dev i prod. – liquid

+3

Każdy pomysł, dlaczego jest to nieudokumentowane? Śledzenie historii git wydaje się, że to działało przez długi czas (przynajmniej od 2011 r.). – Johann

+5

Wszystkie obiekty żądania/odpowiedzi mają atrybut 'app', który odwołuje się do aplikacji Express obsługującej to żądanie/odpowiedź. Oprócz 'req.app.get ('ssoHostname')', możesz także użyć 'req.app.settings.ssoHostname'. – eikonomega

Powiązane problemy