Node.js Express3 – 中间件将渲染数据添加到所有渲染请求

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

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

目前我每次调用res.render的样子都差不多。 我想删除用户:req.user并将其添加到中间件function。

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

Express确实提供了app.localsres.locals ,它会自动合并显式传入的res.locals以通过路由处理程序进行render

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

或者,你可以热补丁renderfunction。 我会避免这一点,因为它是额外的开销,但如果由于某种原因,你需要传递的信息不可用之前,你的路由处理程序运行,这是一个选项:

 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(); }); 

弄清楚了。

你可以在你的中间件中使用locals。

  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>