Node.js : Express app.get with multiple query parameters

妖精的绣舞 提交于 2019-12-04 08:52:05

问题


I want to query the yelp api, and have the following route:

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

When I make a GET request to

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

I get the error

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

What am I doing wrong?


回答1:


Have you tried calling it like this?

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

The URL you need to call usually looks pretty much like the route, you could also change it to:

/yelp/:location/:term

To make it a little prettier:

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



回答2:


In the requested url http://localhost:3000/yelp?term=food&location=austin

  • base url/address is localhost:3000
  • route used for matching is /yelp
  • querystring url-encoded data is ?term=food&location=austin i.e. data is everything after ?

Query strings are not considered when peforming these matches, for example "GET /" would match the following route, as would "GET /?name=tobi".

So you should either :

  • use app.get("/yelp") and extract the term and location from req.query like req.query.term
  • use app.get("/yelp/term/:term/location/:location") but modify the url accordingly as luto described.



回答3:


I want to add to @luto's answer. There is no need to define query string parameters in the route. For instance the route /a will handle the request for /a?q=value.

The url parameters is a shortcut to define all the matches for a pattern of route so the route /a/:b will match

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

it wont match

/a/b/something or /a



来源:https://stackoverflow.com/questions/19020012/node-js-express-app-get-with-multiple-query-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!