我的快递项目中有很多页面。导航(发生在所有页面中)包含用户的姓名(如果他们已登录)。我是否需要每次都将用户变量传递给每个页面,还是有更好的方法来执行此操作? 例如:
router.get('/', function(req, res) {
res.render('index', { title: 'Index!', user: req.user });
});
router.get('/helloworld', function(req, res) {
res.render('helloworld', { title: 'Hello World!', user: req.user });
});
...
答案 0 :(得分:2)
正如@robertklep在评论中已经提到的那样,我会稍微扩展一下。
有app.locals
为所有请求设置变量。您可以在路由器外部进行设置。这通常用于设置站点范围的变量,例如站点的标题。
app.locals.title = 'My Site'
然后有res.locals
用于设置特定请求的变量。一个例子是设置用户对象。
res.locals
实际上超越了app.locals
,如果在两者上找到属性,那么res.locals
上的属性优先。例如,您可以拥有一个站点范围的标题,然后是特定路径的特定标题。
app.locals.title = 'My Site'
app.get('/index' function(req, res, next){
res.locals.title = 'Index | ' + app.locals.title;
...
});