Express路由参数

38

我想在我的express应用程序中创建两个路由。一个没有参数的路由将会给我一个选择列表,另一个带有参数的路由将会给我与id相关联的选择。

router.get('/api/choice', choice_controller.get_choices);
router.get('/api/choice/:id', choice_controller.get_choice);

当我访问.../api/choice/?id=1时,API会返回选项列表,并遵循没有参数的路由(/api/choice)。我应该如何确保路由不忽略参数?

谢谢您的帮助。

更新似乎它没有触发/api/choice/:id路由。如果我删除没有参数的路由,它会返回404错误。有人能解释一下为什么/api/choice/?id=1没有被/api/choice/:id所匹配吗?

1个回答

74

基本上,您声明的路由在Express文档中有记录。

第二个路由由类似/api/choice/hello的URL解析,其中“hello”被映射到req对象中:

router.get('/api/choice/:id', function (req, res) {
  console.log("choice id is " + req.params.id);
});

你实际尝试的是映射查询参数。

/api/choice/?id=1 这样的 URL 由您提供的第一个路由器解析。 可以将查询参数轻松映射到请求上,如下所示:

router.get('/api/choice', function (req, res) {
  console.log('id: ' + req.query.id);
  //get the whole query as!
  const queryStuff = JSON.stringify(req.query);
  console.log(queryStuff)
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接