Express アプリケーションにいくつかの GET ルートがあるとします。
// 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
ではなく、パラメーターを使用して 2 番目のハンドラーにヒットします。/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);
なぜこれが起こっているのか、誰かが正確に説明できますか?/albums/23453243
Express は id param ( ) と querystring ( )を識別して適切にルーティングするのに十分スマートであると思い/albums/artwork?artist=artistName&title=albumTitle
ますが、そうではないようです。