2011-11-18 85 views
5

嗨,是否有一種「快遞」特定方式可以讓我的所有路線都可以使用某些全球應用數據? 還是僅僅使用module.exports語句的情況?快遞 - 將數據傳遞給所有路線

任何指針比歡迎。 節點noob - btw

回答

11

您可以設置一個全局對象,也可以在你的佈局

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

您可以在應用的設置部分使用app.set(),以使其可用於每個請求。應用程序對象可通過您的路線中的req.app獲取。

就我個人而言,我喜歡在設置和我通過req.app.settings.name訪問它的路線中執行app.set('name', obj);

+1

你的意思是res.app不是req.app不是? – FireZenk

2

您也可以使用動態助手將數據傳遞給所有視圖。

app.js

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

現在對你的看法,你可以使用它像這樣(我用EJS這個例子,但它應該用玉或任何其他視圖引擎工作):

view.ejs

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

希望這有助於。

+3

你的答案的缺點是對於每個請求你將處理助手。對於像版本這樣的靜態數據,'app.set('view options',someData)'更適合。 DynamicHelpers適用於動態數據。 – jackdbernier

+0

好點!非常感謝您的評論! – FMontano