[英]how to render common variables from app.js to all routes in express
在我的Node.js應用程序中,一些渲染變量或每個路徑都是常見的。每個路徑上有大約4-5個變量。 我有大約20條路線。
目前我正在res.render
中的每個路由傳遞這些變量
有沒有一種方法可以在某些地方傳遞這些公共變量'(例如:app.js)`,每個路由都在使用它,這樣我就可以清理一下我的代碼了。
我使用express.js
作為模板的節點和handlebars
。
編輯:我想我應該多解釋一下
res.render('abc', {
commonitem1: 'one',
commonitem2: 'two',
...
});
-------------------------------------
another route
res.render('xyz', {
commonitem1: 'one',
commonitem2: 'two',
...
});
我希望避免在我的每條路線中重復這種情況,並希望從一個普通的地方渲染它。
對於會話或請求相關值,您可以將這些公共值存儲在全局變量中,然后直接在res.render中使用它們。 為此,您有以下選項
在你的app.js中添加一個中間件,為你做這件事。 請記住在您定義的任何其他路由之前編寫此中間件,因為中間件函數是按順序執行的。
app.use(function(req, res, next){
res.locals.items = "Value";
next();
});
//your routes follow
app.use(‘/’, home);
在您的路線中,您可以將items
直接放在res.render中,例如:
res.render('layout', {title: 'My awesome title',view: 'home', item :res.locals.items });
如果你安裝了快速會話,你可以在req.session.item
保存一些數據並將它們放在任何路由中,如:
res.render('layout', {title: 'My awesome title',view: 'home', item :req.session.items });
似乎res.locals是您正在尋找的 - 這個對象被傳遞給您的每個請求的視圖,並且作用於每個單獨的請求(即每個請求可以有自己的res.locals
版本)。 還有app.locals
,它為所有請求共享。
我沒有這方面的實際經驗,但您可以使用此對象將所有變量傳遞給您的視圖,或者Express可以將app.locals
任何app.locals
與res.locals
合並以及您通過res.render()
發送到視圖的res.render()
。 請仔細測試,我沒有在官方文檔中找到有關合並行為的相關信息。
至於填充res.locals
,為了保持代碼DRY ,您可以編寫一個自定義中間件 ,在您執行實際路由邏輯之前,使用您需要的任何內容來填充對象。
// I created common func for all routes as below.
function commonRes(layout, req, res) {
if (req.session.user) {
res.render(layout, {
user: req.session.user
//csrfToken: req.csrfToken() // csrf
})
} else {
res.render(layout, {
user: null,
csrfToken: null
})
}
return res.end()
}
// and apply it to all routes simply as below
app.get('/', (req, res) => {
return commonRes('index.html', req, res)
})
app.get('/new', (req, res) => {
return commonRes('new.html', req, res)
})
您可以使用以下代碼創建一個constants.js文件
(function (constants) {
var FetchDataErrorMessage = "Error while fetching User Data";
var ConnectionErroMessage = "Error while fetching Connecting Server";
var InsertDataErrorMessage = "Error while inserting User Data";
var RemoveDataErrorMessage = "Error while removing User Data";
var UpdateDataErrorMessage = "Error while updating User Data";
})(module.exports);
在您需要使用這些變量的任何文件中,您可以添加以下代碼。
var constants = require('constants');
console.write(constants.RemoveDataErrorMessage);
輸出: - “刪除用戶數據時出錯”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.