首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js Express3 -将渲染数据添加到所有渲染请求的中间件

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

Stack Overflow用户
提问于 2013-02-25 07:16:22
回答 1查看 8K关注 0票数 25

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

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

目前,我对res.render的每个调用看起来都类似于。我想删除user : req.user并将其添加到中间件函数中。

代码语言:javascript
复制
// Page 1
res.render("somepage1",{data : "somepage1", user : req.user});

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-25 07:23:55

Express确实提供了app.localsres.locals,它用路由处理程序传递给render的显式本地变量对它们进行automatically merges

代码语言:javascript
复制
app.use(function(req, res, next) {
    res.locals.user = req.user;
    next();
});

或者,您可以对render函数进行热补丁。我会避免这一点,因为这是额外的开销,但如果由于某些原因,您需要在路由处理程序运行之前传递不可用的信息,这是一个选择:

代码语言:javascript
复制
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();
});
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15057857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档