Поэтому у меня есть следующий маршрут:
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
.
Если я прокомментирую или переведу его ниже другого маршрута, он работает так, как ожидалось.
Почему это?
В Express важно определить ваши определения маршрутизации. Он выполнит первый соответствующий маршрут. Как указано в Blex, '/:id'
является подстановочным значением и сопоставляет '/resource'
вместо пропусков мимо и после правильного определения маршрута.
Решение состоит в том, чтобы переключать определения, чтобы иметь '/project/resource'
определенный до '/project/:id'
Решение состоит в том, чтобы добавить еще один уровень пути, например '/project/res/resource'
вместо '/project/resource'
поскольку Express не будет соответствовать этому значению '/:id'
.
wildcards
должны быть ниже них.
:id
может быть любым (например,135
,foo
,resource
). Итак, если ваши маршруты объявлены так, как вы это сделали, Express найдет совпадение для'/project/:id'
и остановится на этом. Если вы попытаетесь сначала найти'/project/resource/'
, он не будет проверять другие маршруты.:whatever
если экспресс не соответствует ему точно? Я думал, что весь смысл маршрутизации должен соответствовать конкретным URL.