2015-03-25 66 views
1

我有一箇中間件(在sails.js中,一個表示的框架),它在數據庫中查找內容,然後存儲它在對象中找到的內容,所以我可以在佈局中使用它/控制器。在req vs res中存儲數據

目前,我將其存儲在req對象,像這樣:

req.someStuff = 'Some stuff'; 

不過,我剛剛看了,你也可以這樣做:

res.locals.someStuff = 'Some stuff'; 

有什麼區別?兩人都能完成同樣的任務。謝謝。

+0

請確保您標記爲已完成,如果它回答您的問題。 – 2015-03-25 12:55:30

回答

1

請參閱the docs here

基本上,你將res.locals傳遞給渲染引擎(比如說你正在使用jade,ejs等等)。在渲染時,它可以在全局範圍內使用,因此您可以將它們命名爲named(即someStuff而不是locals.someStuff)。

res.someStuff因此在渲染時不會被全局範圍使用,因此無法通過您使用的任何渲染模板(即不能被稱爲someStuff)訪問。

簡而言之,它只是提供了一種簡單的方式將某些東西傳遞給渲染模板並使其可以在全局範圍內訪問。

(使用EJS)的一個例子是像

<% if(someStuff) { ... } %> 

<!-- or even this --> 
<% if(locals.someStuff) { ... } %> 

編輯 - 我也是剛認識你張貼REQ .someStuff VS 資源 .someStuff。您可以通讀這些相同的文檔以查看它們之間的區別,但基本上一個是傳入請求對象,另一個是傳出響應對象。 (這是http請求 - 響應協議)

+0

哦,好吧,res.locals只給佈局提供方便的變量名稱。但是輸入req.someStuff並不是一件麻煩事。我認爲可能會有更大的差異。我想最好堅持req,someStuff,如果你也將在控制器中使用它。是的,我已經意識到req代表請求和res的迴應,謝謝。 – Simoon 2015-03-25 02:38:08

+0

是的,我認爲你有一般的想法,但你稍微陳述了這個錯誤。如果你傳遞類似funcName(req,resp){..}的東西並繼續傳遞req,resp,當然你可以訪問這兩個對象(比如從控制器到服務層等)。但是resp是頁面呈現時所調用/使用的內容。它需要該響應對象上的任何內容,並使其在模板文件中可用。請求。不是(它來自任何來自http請求的傳入數據) – 2015-03-25 02:50:42

+0

我想說的是req和resp在本地域方面是根本不同的。當地人只是一種簡單的方法來保持綁定到特定範圍的東西(res.locals - 視圖模板中的全局視圖,app.locals - 範圍內的整個快速應用程序)。 – 2015-03-25 02:53:32