Скажем, у меня есть несколько маршрутов GET в моем приложении Express:
// music albums
app.get('/api/albums', routes.albums.getAlbums);
app.get('/api/albums/:id', routes.albums.getAlbum);
app.get('/api/albums/artwork', routes.albums.getAlbumArtwork);
и я пытаюсь ударить их, используя следующий фрагмент jQuery AJAX:
$("#retrieveAlbumArtwork").on("click", function() {
$.ajax({
url: "api/albums/artwork",
type: "GET",
data: {
artist: $("#albumArtist").val(),
title: $("#albumTitle").val()
},
// ... callbacks and such
По какой-то причине этот вызов попадает во второй обработчик с параметром /:id
вместо явного маршрута /artwork
. Таким образом их свопинг делает их функционирующими, как ожидалось:
// music albums
app.get('/api/albums', routes.albums.getAlbums);
app.get('/api/albums/artwork', routes.albums.getAlbumArtwork);
app.get('/api/albums/:id', routes.albums.getAlbum);
Может кто-нибудь объяснить, почему это происходит? Я бы предположил, что Express будет достаточно умным, чтобы идентифицировать id param (/albums/23453243
) по сравнению с запросом (/albums/artwork?artist=artistName&title=albumTitle
) и соответствующим образом маршрутизировать, но это, похоже, не так?