快速路由参数

Posted

技术标签:

【中文标题】快速路由参数【英文标题】:Express routes parameters 【发布时间】:2016-04-14 18:17:12 【问题描述】:

我正在尝试在我的快递应用中创建两条路线。一条不带参数的路线会给我一个选择列表,另一条带参数的路线会给我与 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】:

基本上,您声明的路线记录在Express documentation。

第二条路由由/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)
);

【讨论】:

以上是关于快速路由参数的主要内容,如果未能解决你的问题,请参考以下文章

服务治理最佳实践:如何快速依据请求参数值进行服务路由鉴权限流?

Gin框架快速入门

Gin框架快速入门

导航到路由参数时未调用 ngOnInit

扩展对护照用户参数的快速请求

带有快速数组参数的节点mysql批量插入