Почему маршрутизация Express.js не выбирает правильный маршрут?

1

Поэтому у меня есть следующий маршрут:

app.delete('/project/:id', crud.deleteProject);
app.delete('/project/resource/', crud.removeResourceFromProject);

Когда я запускаю вызов ajax с URL-адресом http://mysite.no/project/resource/:

delete: function(url,data) {
return $.ajax({
  url: url,
  type: "DELETE",
  dataType: 'json',
  data: data
});

Express запускает функцию crud.deleteProject.

Если я прокомментирую или переведу его ниже другого маршрута, он работает так, как ожидалось.

Почему это?

  • 4
    В этом случае порядок маршрутов очень важен. :id может быть любым (например, 135 , foo , resource ). Итак, если ваши маршруты объявлены так, как вы это сделали, Express найдет совпадение для '/project/:id' и остановится на этом. Если вы попытаетесь сначала найти '/project/resource/' , он не будет проверять другие маршруты.
  • 0
    Какой смысл использовать :whatever если экспресс не соответствует ему точно? Я думал, что весь смысл маршрутизации должен соответствовать конкретным URL.
Показать ещё 5 комментариев
Теги:
express

1 ответ

0

В Express важно определить ваши определения маршрутизации. Он выполнит первый соответствующий маршрут. Как указано в Blex, '/:id' является подстановочным значением и сопоставляет '/resource' вместо пропусков мимо и после правильного определения маршрута.

Решение состоит в том, чтобы переключать определения, чтобы иметь '/project/resource' определенный до '/project/:id'

Решение состоит в том, чтобы добавить еще один уровень пути, например '/project/res/resource' вместо '/project/resource' поскольку Express не будет соответствовать этому значению '/:id'.

  • 0
    Самое простое решение - переместить определение статических маршрутов выше, а все wildcards должны быть ниже них.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню