Получите маршруты nodejs, как он будет реагировать, если 2 маршрута одинаковы? - PullRequest
0 голосов
/ 31 мая 2018

Моя команда разрабатывает API nodejs с помощью Express, и нам интересно, будут ли эти маршруты конфликтовать:

  • Первый маршрут GET: / aws / volume /: id
  • Второй маршрут GET: / aws / объемы / типы

Если кто-то получил информацию для этого, пожалуйста.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Первый маршрут, соответствующий запросу, выиграет!Это означает, что оба могут соответствовать одному и тому же запросу.Таким образом, вы должны поставить самый конкретный в первую очередь, то есть, "/ aws / volume / types".Таким образом, он будет запускать обработчик для маршрута «types», если вы запросите «/ aws / volume / types», в противном случае он будет запускать обработчик для маршрута «: id».

Также выможете использовать регулярное выражение, если вы хотите быть более точным с тем, что вы ожидаете как ": id".Подробнее см. Здесь: http://expressjs.com/en/guide/routing.html в разделе "пути маршрутов".

Наконец, вы также можете попробовать инструкцию next('route') в этом случае.Вместо того, чтобы просто вызывать next(), который вызовет следующее промежуточное программное обеспечение того же маршрута, next('route') передаст управление следующему соответствующему обработчику маршрута.Смотрите ответ здесь: В чем разница между next () и next ('route') в вызове expressjs app.VERB?

0 голосов
/ 31 мая 2018

Да, эти маршруты будут конфликтовать.Если вы предоставляете маршруты в следующем порядке, он всегда попадает на первый маршрут, хотя вы называете «/ aws / volume / types».

  • Первый маршрут GET: / aws / volume /: id
  • Второй маршрут GET: / aws / volume / types

Если вы указали маршрутыкак показано ниже, тогда они не приведут к конфликту.

  • Первый маршрут GET: / aws / volume / types
  • Второй маршрут GET: / aws / volume /: id
0 голосов
/ 31 мая 2018

Они будут конфликтовать.Например,

Если вы сначала определите GET /aws/volumes/:id, то все нижеуказанные будут указывать на него:

  • GET /aws/volumes/example
  • GET /aws/volumes/qwerty
  • GET /aws/volumes/types

В качестве альтернативы вы можете воспользоваться вторым маршрутом, чтобы обойти вышеуказанное:

  • GET /aws/volumes?q=types
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...