12

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?

4 Answers 4

14

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
Sign up to request clarification or add additional context in comments.

Comments

12

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.

Comments

4

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

Comments

1

Express 4.18.1 update:

using app.get("/yelp/term/:term/location/:location"), your query string can be yelp/term/food/location/austin

So your request url will look like this:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.