将请求相关变量传递给每个渲染调用而不使其成为静态

时间:2015-12-31 03:45:23

标签: node.js express handlebars.js

我使用中间件为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); }

但是那种感觉非常错误&冗长。

有什么想法吗?

0 个答案:

没有答案