Express有几种方式装饰视图选项吗?

我有一些variables,将在每个dynamic页面上使用,因为它在布局中使用。 让我们称他们为usercities 。 对于user我遵循明确的指示,把一个中间件放在我要使用它的地方,除了我这样做:

 app.get('/*', function(req, res, next){ req.user = { name: "Kit" }; next(); }); 

user放在req上似乎是有意义的,但是它在cities有点不合适,因为它在语义上似乎不符合req对象:

 app.get('/*', function(req, res, next){ User.collection.distinct('city', function(err, response){ req.cities = response; next(); }); req.menu = response; }); 

然后我遵循:

 app.get('/:city', function(req, res){ res.render('city', { cities: cities, user: user }); }); 

有没有更好的方法去做这件事?

我看不出有什么可怕的错误,尤其是对于一个小的代码库。 它看起来像城市绑定到用户,所以你可能只想通过在你的User.collection.distinctcallback中执行req.user.cities = response来挂起req.user的城市。 另一件事就是你每次请求都要查询这些城市。 这可能是好的,但是如果这个数据是相对静态的,那么在会话生命周期中使用会话并caching这些数据将作为一个优化是有意义的。

如果你只想要一个更清晰的名字,你可以创build一个顶级的locals对象,挂起这个closures请求,然后把用户和城市都挂起来,这样req.locals.cities