Node.js:具有多个查询参数的Express app.get

时间:2013-09-26 05:25:12

标签: node.js express get query-string

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

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

当我向

发出GET请求时

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

我收到错误

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

我做错了什么?

3 个答案:

答案 0 :(得分:13)

您是否尝试过这样称呼它?

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

您需要调用的URL通常与路径非常相似,您也可以将其更改为:

/yelp/:location/:term

让它变得更漂亮:

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

答案 1 :(得分:8)

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

  • 基本网址/地址为localhost:3000
  • 用于匹配的
  • 路线为/yelp
  • 查询字符串网址编码数据为?term=food&location=austin,即数据是否为之后的所有内容?

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

所以你应该:

  • 使用app.get(“/ yelp”)并从req.query中提取术语和位置,如req.query.term
  • 使用app.get(“/ yelp / term /:term / location /:location”),但相应地修改网址为luto描述。

答案 2 :(得分:4)

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

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

  1. /a/b
  2. /a/c
  3. /a/anything
  4. 它不匹配

    /a/b/something/a