Есть ли в Express удобный способ оформления параметров просмотра в несколько этапов? - PullRequest
1 голос
/ 20 мая 2011

У меня есть некоторые переменные, которые будут использоваться на каждой динамической странице, как это используется в макете.Давайте назовем их 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 });
});

Isесть лучший способ сделать это?

1 Ответ

3 голосов
/ 20 мая 2011

Я не вижу ничего ужасного в том, как вы это делаете, особенно для небольшой кодовой базы.Похоже, что города привязаны к пользователю, поэтому вы можете просто повесить города в req.user, выполнив req.user.cities = response в вашем User.collection.distinct обратном вызове.Другое дело, что вы запрашиваете эти города по каждому запросу.Это может быть хорошо, но если эти данные относительно статичны, использование сессий и кэширование этих данных во время жизни сеанса будет иметь смысл в качестве оптимизации.

Если вы хотите просто получить более четкое имя, вы можете сделатьобъект верхнего уровня locals, повесьте этот запрос на отключение, а затем повесьте и пользователя, и города на этом, так что req.locals.cities.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...