10

我想查询yelp api,并有以下路线:

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

当我向

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

我得到错误

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

我究竟做错了什么?

4

3 回答 3

13

你试过这样称呼它吗?

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

您需要调用的 URL 通常看起来很像路由,您也可以将其更改为:

/yelp/:location/:term

为了让它更漂亮一点:

http://localhost:30000/yelp/austin/food
于 2013-09-26T05:51:20.343 回答
11

在请求的网址中http://localhost:3000/yelp?term=food&location=austin

  • 基本网址/地址是localhost:3000
  • 用于匹配的路由是/yelp
  • 查询字符串 url 编码的数据是?term=food&location=austinie 之后的所有数据?

执行这些匹配时不考虑查询字符串,例如“GET /”将匹配以下路由,“GET /?name=tobi”也是如此。

所以你应该:

  • 使用 app.get("/yelp") 并从 req.query 中提取术语和位置,例如req.query.term
  • 使用 app.get("/yelp/term/:term/location/:location") 但相应地修改 url,如 luto 所述。
于 2013-09-26T06:07:20.410 回答
4

我想添加到@luto 的答案。无需在路由中定义查询字符串参数。例如,路由/a将处理对/a?q=value.

url 参数是为路由模式定义所有匹配项的快捷方式,因此路由/a/:b将匹配

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

它不匹配

/a/b/something或者/a

于 2013-09-26T06:03:32.607 回答