2013-09-26 143 views
7

Tôi muốn truy vấn api yelp, và có các tuyến đường sau:Node.js: Thể hiện sự app.get với nhiều truy vấn tham số

app.get("/yelp/term/:term/location/:location", yelp.listPlaces) 

Khi tôi thực hiện một yêu cầu GET để

http://localhost:3000/yelp?term=food&location=austin,

tôi nhận được lỗi

Cannot GET /yelp?term=food&location=austin 

tôi đang làm gì sai?

Trả lời

9

Bạn đã thử gọi nó như thế này chưa?

http://localhost:30000/yelp/term/food/location/austin 

URL mà bạn cần phải gọi thường trông khá giống như con đường, bạn cũng có thể thay đổi nó thành:

/yelp/:location/:term 

Để làm cho nó một chút đẹp hơn:

http://localhost:30000/yelp/austin/food 
4

tôi muốn thêm vào câu trả lời của @ luto. Không cần xác định tham số chuỗi truy vấn trong tuyến đường. Ví dụ: tuyến đường /a sẽ xử lý yêu cầu cho /a?q=value.

Các thông số url là một phím tắt để xác định tất cả các trận đấu cho một mô hình của tuyến đường nên con đường /a/:b sẽ phù hợp

  1. /a/b
  2. /a/c
  3. /a/anything

nó phù hợp sẽ không

/a/b/something hoặc /a

8

Trong url yêu cầu http://localhost:3000/yelp?term=food&location=austin

  • cơ sở url/địa chỉ là localhost:3000
  • tuyến đường sử dụng cho phù hợp là /yelp
  • querystring url-mã hóa dữ liệu được ?term=food&location=austin ví dụ: dữ liệu là tất cả mọi thứ sau?

Chuỗi truy vấn không được xem xét khi định dạng các kết quả trùng khớp này, ví dụ "GET /" sẽ khớp với tuyến đường sau, như "GET /? Name = tobi".

Vì vậy, bạn nên một trong hai:

  • sử dụng app.get ("/ yelp") và trích xuất các hạn và vị trí từ req.query như req.query.term
  • app.get sử dụng ("/ yelp/hạn /: term/location /: location ") nhưng sửa đổi url tương ứng như luto được mô tả.