Nói rằng tôi đã có một vài tuyến đường GET trên ứng dụng Express:Đặt tên và đặt hàng tuyến đường Node.js Express: ưu tiên được xác định như thế nào?
// 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);
và tôi cố gắng để đánh họ bằng cách sử dụng theo đoạn jQuery AJAX:
$("#retrieveAlbumArtwork").on("click", function() {
$.ajax({
url: "api/albums/artwork",
type: "GET",
data: {
artist: $("#albumArtist").val(),
title: $("#albumTitle").val()
},
// ... callbacks and such
Đối với một số lý do, cuộc gọi này hit trình xử lý thứ hai, với thông số /:id
, thay vì đường dẫn rõ ràng /artwork
. Trao đổi chúng giống như vậy khiến chúng hoạt động như mong đợi:
// 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);
Ai đó có thể giải thích chính xác tại sao điều này xảy ra? Tôi sẽ giả sử Express sẽ đủ thông minh để xác định một tham số id (/albums/23453243
) so với một chuỗi truy vấn (/albums/artwork?artist=artistName&title=albumTitle
) và tuyến đường phù hợp, nhưng điều này dường như không phải là trường hợp?
Đúng, cách thứ hai là cách TJ Holowaychuk (tác giả của Express) sử dụng trong ví dụ của mình: https://github.com/visionmedia/express/blob/master/examples/route-separation/index.js#L29 – verybadalloc