dire che ho avuto un paio di percorsi darmi sui Application Express:Node.js Express naming e ordinamento delle route: come viene determinata la precedenza?
// 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);
e tento di colpirli con il seguire jQuery AJAX frammento:
$("#retrieveAlbumArtwork").on("click", function() {
$.ajax({
url: "api/albums/artwork",
type: "GET",
data: {
artist: $("#albumArtist").val(),
title: $("#albumTitle").val()
},
// ... callbacks and such
Per qualche ragione, questo colpi di chiamata il secondo gestore, con il parametro /:id
, anziché il route esplicito /artwork
. Scambiarli in questo modo li fa funzionare come previsto:
// 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);
Qualcuno può spiegare esattamente perché questo sta accadendo? Suppongo che Express sia abbastanza intelligente da identificare un parametro id (/albums/23453243
) rispetto a una querystring (/albums/artwork?artist=artistName&title=albumTitle
) e instradare in modo appropriato, ma questo non sembra essere il caso?
Sì, il secondo modo è il modo in cui TJ Holowaychuk (creatore di Express) utilizza nei suoi esempi: https://github.com/visionmedia/express/blob/master/examples/route-separation/index.js#L29 – verybadalloc