Экспресс универсальный маршрут с необязательным первым параметром - PullRequest
0 голосов
/ 28 июня 2019

Как реализовать маршрут (промежуточное ПО), который будет вызываться при каждом запросе, но в то же время он должен перехватывать необязательный параметр lang.

Пока что я попробовал код ниже, но он не работает. Скорее всего проблема с сопоставлением пути (/:lang*?). В приведенном ниже коде lang параметр не определен:

const SUPPORTED_LOCALES = ['en', 'fr', 'de'];

expressServer.use('/:lang*?', function(req, res, next) {
   // check if known locale, if no then fallback to 'en'
   const locale = SUPPORTED_LOCALES.includes((req.params.lang)) ? req.params.lang : 'en'; 
   req.locale = locale;
   next();
}

Это промежуточное программное обеспечение должно перехватывать абсолютно все запросы, даже только доменное имя (в случае отсутствия языкового стандарта оно будет откатываться на языковой стандарт по умолчанию en):

example.com
example.com/de/blog/2
example.com/fr
example.com/en
example.com/en/blog/1
example.com/blog/1

1 Ответ

1 голос
/ 28 июня 2019

Вы можете просто использовать app.use без пути

app.use(function (req, res, next) {
  console.log('Time: %d', Date.now())
  next()
})

Пример из Express app.use

Не уверен, что это работает, но код языка в ваших случаях длиной 2 символа.Таким образом, regex в качестве первого параметра позволяет указывать все маршруты двумя символами.

app.use('/\/^([a-z]){2}$/', function (req, res, next) {
  console.log('Language:', req.originalUrl.substr(1));
  next();
})

req.originalUrl возвращает, например, /en.Чтобы удалить косую черту, просто удалите ее с помощью substr.

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