2012-07-27 58 views
2

我正在使用Express來爲node.js應用程序中的網頁提供服務。Node.js/Express - 通過請求/響應對象修改響應模板上下文

比方說,我想有一個變量foorender響應對象的方法呈現的所有視圖中可用。我知道我可以爲這個任務定義動態助手。然而,我發現他們不適合當你需要異步設置輔助變量像這樣(貓鼬爲例):

Thing.count(filter, function(error, thingCount) { 
    foo = thingCount; 
} 

我使用連接中間件的方式,這適合我試過了,但這裏的問題是如何影響響應上下文。通過觀察render方法定義express/lib/view.js我發現,它可以被寫入app._locals操縱對象:

function putFooIntoContext (req, res, next) { 
    Thing.count(filter, function(error, thingCount) { 
    res.app._locals.foo = thingCount; 
    next(); 
    } 
} 

它的作品如預期,不過,我有點擔心這樣直接的方法是不最好的解決方案。有人可以給我任何想法如何通過與Express開發人員合理設計的請求/響應對象交互來影響響應上下文嗎?

回答

0

Express 3.x允許以'app.use'的形式使用異步助手。因此,對於一個簡單的全球性「富」的變量,你的代碼將如下所示:

app.use(req, res, next) { 
    Thing.count(filter, function(error, thingCount) { 
     res.locals.foo = thingCount; 
     next(); 
    }); 
} 

當然中間件選項也是有效的,這只是另一種觀點,並節省每插入每個app.get中間件(。 ...)