Express路由器在添加参数时使用不同的路由

时间:2019-03-05 21:02:16

标签: node.js express router

我有两条路线

我正在尝试访问/ name并传递名称参数。当端点只有/ name且没有参数时,它将命中/ name路由,但是当我将其更改为'/ name /:name'以获取参数时,它将切换并开始使用'/:id'路由

router.get('/name/:name', (req, res, next) => {
  console.log('called name',req.params.name )
  Project.findOne({name:req.params.name}).then(results => {
    res.json({"project": results})
  })
})

router.get('/:id', (req, res, next) => {
  console.log('called id')
  Project.findOne({_id:req.params.id}).then(results => {
    res.json({"project": results})
  })
})

当我删除':name'时,它使用名称路由,但是当我重新添加它时,它使用ID。

1 个答案:

答案 0 :(得分:1)

我想您误解了路线的工作方式。请查看this mdn page,以了解更多信息。

/name/:name将与/name/.*之类的任何路由匹配,这意味着如果它以/name/作为前缀,即/name/xyz,它将与anythyng匹配。

:name PLACEHOLDER 。这意味着您放置在/name/之后的任何内容都可以通过req.params.name变量访问。

现在以您的示例为例,当您击中/name:name时,它与/name/.*模式不匹配,因此转到下一条路线。 /:id表示/.*实际上是任何路线。