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