Express有几种方式装饰视图选项吗?
我有一些variables,将在每个dynamic页面上使用,因为它在布局中使用。 让我们称他们为user
和cities
。 对于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.distinct
callback中执行req.user.cities = response
来挂起req.user的城市。 另一件事就是你每次请求都要查询这些城市。 这可能是好的,但是如果这个数据是相对静态的,那么在会话生命周期中使用会话并caching这些数据将作为一个优化是有意义的。
如果你只想要一个更清晰的名字,你可以创build一个顶级的locals
对象,挂起这个closures请求,然后把用户和城市都挂起来,这样req.locals.cities
。