是否可以通过express中间件或其他方法将渲染数据(res.render中的第二个选项)添加到应用程序路由中的每个调用。
我的应用程序使用passport进行身份验证,我希望中间件始终将用户信息附加到每个呈现的模板中。
目前,我对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});发布于 2013-02-25 07:23:55
Express确实提供了app.locals和res.locals,它用路由处理程序传递给render的显式本地变量对它们进行automatically merges。
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();
});https://stackoverflow.com/questions/15057857
复制相似问题