是否可以通过快速中间件或其他方法将应用程序路径中的每个调用添加渲染数据(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});
答案 0 :(得分:31)
Express确实提供了app.locals
和res.locals
,automatically 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>
击>