如何将app.js中的公共变量渲染到express中的所有路径

zam*_*mil 5 node.js express handlebars.js

在我的Node.js应用程序中,渲染或每个路径的一些变量是常见的.每个路径上有大约4-5个变量.我有大约20条路线.

目前我在传递每个路径中的变量 res.render

有没有一种方法可以在某些地方传递这些公共变量'(例如:app.js)`,每个路由都在使用它,这样我就可以清理一下我的代码了.

express.js用于节点和handlebars模板.

编辑:我想我应该多解释一下

res.render('abc', {
                        commonitem1: 'one',
                        commonitem2: 'two',
                        ...
                   });

-------------------------------------
another route
res.render('xyz', {
                        commonitem1: 'one',
                        commonitem2: 'two',
                        ...
                   });
Run Code Online (Sandbox Code Playgroud)

我希望避免在我的每条路线中重复这种情况,并希望从一个普通的地方渲染它.

Sum*_*nha 6

对于会话或请求相关值,您可以将这些公共值存储在全局变量中,然后直接在res.render中使用它们.为此,您有以下选项

  • 使用app.use存储值:

在你的app.js中添加一个中间件,为你做这件事.请记住在您定义的任何其他路由之前编写此中间件,因为中间件函数是按顺序执行的.

app.use(function(req, res, next){
    res.locals.items = "Value";
    next();
});
//your routes follow
app.use(‘/’, home);
Run Code Online (Sandbox Code Playgroud)

在您的路线中,您可以items直接放在res.render中,如:

res.render('layout', {title: 'My awesome title',view: 'home', item :res.locals.items });
Run Code Online (Sandbox Code Playgroud)
  • 使用express-session存储值:

如果你安装了快速会话,你可以保存一些数据req.session.item并将它们放在任何路由中,如:

res.render('layout', {title: 'My awesome title',view: 'home', item :req.session.items });
Run Code Online (Sandbox Code Playgroud)