1
我正在使用護照來驗證我的用戶,這是沒有問題的。我的問題包括傳遞請求的每個頁面 一些要求的參數。傳遞參數爲每個請求
有一些方法來完成它:
- 使用
app.locals
存儲變量,但它可用於連接和 不必要的信息將共享每個用戶,這是一個風險。 - 當渲染一個頁面
res.render('some_page', { params });
時,您也必須爲每個請求添加這些額外的參數 。對象在發送之前會被修改。
我使用第二種方法,並做到這一點我做了這樣的全局函數:
GLOBAL.handleRes = function(req, data) {
data.session = req.session;
data.user = req.user;
data.userToken = req.userToken;
if (req.user && req.session) {
data.session.user = req.user;
}
return data;
}
因此,對於每個註冊route
,我已經使用這個handleRes
建立起來的最終的JSON將會被髮送到頁面 。
例子:
app.get('/project/list', function(req, res, next) {
// DO SOMETHING
var pageJson = {
...
}
res.render('project_list.ejs', { handleRes(res, pageJson) });
};
app.get('/another/route', function(req, res, next) {
// SAME STRUCTURE FROM ABOVE
res.render('another_route.ejs', { handleRes(res, pageJson) });
}
它的工作原理,但我想避免handleRes()
功能的這種計算策略,並快速自動「完成」我的json參數。我如何使 更容易,更簡潔,更優雅?
謝謝!
##修訂##
安德烈亞斯幫助我解決的辦法是:
app.use(function(req, res, next) {
res.locals.user = null;
res.locals.session = null;
res.locals.userToken = null;
if (req.user)
res.locals.user = req.user;
if (req.session) {
res.locals.session = req.session;
if (req.user)
res.locals.session.user = req.user;
}
if (req.userToken)
res.locals.userToken = req.userToken;
next();
});
我之前正在考慮使用中間件,但我不知道如何使它工作。我想到了一些關於路由攔截器的東西。謝謝 – Ito