2011-11-18 15 views
5

Witam, czy istnieje "ekspresowy" określony sposób udostępniania niektórych danych globalnych aplikacji na wszystkich moich trasach? A może jest to przypadek użycia instrukcji module.exports?Express - przekazywanie danych do wszystkich tras

Wszelkie wskazówki bardziej niż mile widziane. Węzeł węzła - btw

Odpowiedz

11

Można ustawić globalny obiekt, który jest również dostępny w układzie

app.js

app.configure(function(){ 
    app.set('view options', {pageTitle: ''}) 
} 

app.get('/',function(request, response){ 
    response.app.settings['view options'].pageTitle = 'Hello World' 
    response.render('home') 
}) 

layout.jade

!!! 
html 
    head 
    title= pageTitle 
    body!= body 
7

Możesz użyć app.set() w części konfiguracyjnej aplikacji, aby była dostępna dla każdego żądania. Obiekt aplikacji jest dostępny za pośrednictwem req.app w twoich trasach.

Osobiście lubię robić app.set('name', obj); w konfiguracji i na trasach, do których uzyskuję dostęp przez req.app.settings.name.

+1

Masz na myśli res.app not req.app nie jest? – FireZenk

2

Można też użyć dynamiczny pomocnik do przekazywania danych do wszystkich widoków.

app.js

// Dynamic Helpers 
app.dynamicHelpers({ 
    appSettings: function(req, res){ 
     return {name:"My App", version:"0.1"}; 
    } 
}); 

Teraz na widokach można go używać tak (użyłem EJS na tym przykładzie, ale powinien działać z jadeitu lub jakikolwiek inny silnik widok):

view.ejs

<%= appSettings.name %> 
<%= appSettings.version %> 

nadzieję, że to pomaga.

+3

Wadą twojej odpowiedzi jest to, że dla każdego wniosku przetworzysz pomocnika. W przypadku danych statycznych, takich jak wersja, '' app.set ('view options', someData) 'jest lepiej dopasowany. DynamicHelpers są przeznaczone do dynamicznych danych. – jackdbernier

+0

Dobra uwaga! Wielkie dzięki za komentarz! – FMontano

Powiązane problemy