我有两条路线
我正在尝试访问/ 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。
答案 0 :(得分:1)
我想您误解了路线的工作方式。请查看this mdn page,以了解更多信息。
/name/:name
将与/name/.*
之类的任何路由匹配,这意味着如果它以/name/
作为前缀,即/name/xyz
,它将与anythyng匹配。
:name
是 PLACEHOLDER 。这意味着您放置在/name/
之后的任何内容都可以通过req.params.name
变量访问。
现在以您的示例为例,当您击中/name:name
时,它与/name/.*
模式不匹配,因此转到下一条路线。 /:id
表示/.*
实际上是任何路线。