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

ncf*_*ncf 4 node.js express

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

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

app.use(function(req, res, next) {
    req.styles = helper.getStylesForPage(req.originalUrl);
    next();
});
Run Code Online (Sandbox Code Playgroud)

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

router.get('/', function(req, res, next) {
    res.render('index', {
        styles: req.styles
    });
});
Run Code Online (Sandbox Code Playgroud)

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

ncf*_*ncf 5

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

app.use(function(req, res, next) {
    res.locals.styles = helper.getStylesForPage(req.originalUrl);
    next();
});
Run Code Online (Sandbox Code Playgroud)

作为旁注,如果您不知道是什么res.locals,则此对象会在您的视图中公开,并且本质上与此相同:

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

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