使用中间件自动将变量传递到视图中

时间:2016-03-23 05:47:52

标签: node.js express

在每个请求中搜索使用express自动将值传递给视图的方法。

我在我的启动脚本中使用了这个中间件,它基本上得到了我在视图中输出的样式表数组。

app.use(function(req, res, next) {
    req.styles = helper.getStylesForPage(req.originalUrl);
    next();
});

然后我可以在渲染页面时使用它:

router.get('/', function(req, res, next) {
    res.render('index', {
        styles: req.styles
    });
});

我正在寻找的是一种方法,可以将这个值自动放入这个传递给视图的对象中,可能是在中间件函数中,所以我不必手动执行它在每条路线上。

1 个答案:

答案 0 :(得分:3)

我弄清楚了,事实证明我可以使用res.locals。我刚刚将中间件功能切换为:

app.use(function(req, res, next) {
    res.locals.styles = helper.getStylesForPage(req.originalUrl);
    next();
});

作为旁注,如果你不知道res.locals是什么,这个对象会在你的视图中公开,并且基本上是这样做的:

router.get('/', function(req, res, next) {
    res.render('index', {
        styles: helper.getStylesForPage(req.originalUrl)
    });
});

唯一的区别是它是一个可重复使用的中间件功能,所以我现在不必把它放在每条路线上。