Node.js Express - 用于将渲染数据添加到所有渲染请求的中间件

时间:2013-02-24 23:16:22

标签: node.js express

是否可以通过快速中间件或其他方法将应用程序路径中的每个调用添加渲染数据(res.render中的第二个选项)。

我的应用程序使用护照进行身份验证,我希望中间件始终将用户信息附加到每个呈现的模板。

目前我对res.render的每次通话看起来都相似。我想删除user : req.user并将其添加到中间件函数。

// Page 1
res.render("somepage1",{data : "somepage1", user : req.user});

// Page 2
res.render("somepage2",{data : "somepage2", user : req.user});

2 个答案:

答案 0 :(得分:31)

Express确实提供了app.localsres.localsautomatically merges明确的本地人通过路由处理程序传递给render

app.use(function(req, res, next) {
    res.locals.user = req.user;
    next();
});

或者,您可以热修补render功能。我会避免这种情况,因为这是额外的开销,但如果由于某种原因你需要在路由处理程序运行之前传递不可用的信息,那么这是一个选项:

app.use(function(req, res, next) {
    var render = res.render;
    res.render = function(view, locals, cb) {
        if (typeof locals == 'object') locals.user = req.user;
        render.call(res, view, locals, cb);
    };
    next();
});

答案 1 :(得分:9)

想出来。

您可以在中间件中使用本地人。

  app.use(function(req, res, next){
    res.locals.user = req.user;
    next();
  });

然后在模板中使用。

<h1>User Name:{{user.name}}</h1>

<击> <h1>User Name:{{_locals.user.name}}</h1>