我使用中间件为app.locals
添加静态变量以用于我的快速视图引擎(在我的情况下为express-handlebars)。
app.get('*', function (req, res, next) {
var authenticated = req.isAuthenticated();
if (authenticated) {
app.locals['static'].authenticated = true;
app.locals['static'].uid = req.user._id;
app.locals['static'].username = req.user.name;
app.locals['static'].activated = req.user.activated;
} else {
app.locals['static'].authenticated = false;
}
next();
});
但这显然是一个糟糕的决定,因为我现在已经学到了很多困难。
想象一下,两个请求几乎同时进入。请求A覆盖静态属性authenticated
等,并在两个响应上发送它。
但是因为我在每个模板中都需要这些变量,因为我在导航中使用它们(注销用于经过身份验证;登录用于未经身份验证的用户)。
我可能做的是为res.render
编写一个包装器,如
function render(req,res,view,opts){ opts.auth.authenticated = req.isAuthenticated(); return res.render(view,opts); }
但是那种感觉非常错误&冗长。
有什么想法吗?