28

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/23453243Express は id param ( ) と querystring ( )を識別して適切にルーティングするのに十分スマートであると思い/albums/artwork?artist=artistName&title=albumTitleますが、そうではないようです。

4

1 に答える 1