【问题标题】:Express router uses different route when adding paramExpress 路由器在添加参数时使用不同的路由
【发布时间】:2019-03-05 21:02:15
【问题描述】:

我有两条路线

我正在尝试访问 /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' 时,它使用 name 路由,但是当我将它添加回来时,它使用 Id。

【问题讨论】:

  • 给出示例路线。比如你访问的是哪个 url,结果是什么。这将澄清一些事情。
  • 我正在尝试访问 /name 并传递名称参数。当我将端点设置为没有参数的 /name 时,它​​会到达 /name 路由,但是当我将其更改为 '/name:name' 以获取参数时,它会切换并开始使用 '/:id' 路由

标签: node.js express router


【解决方案1】:

我猜你误解了路由的工作原理。查看this mdn page 了解更多信息。

/name/:name 将匹配任何类似/name/.* 的路由,这意味着它将匹配任何以/name/ 为前缀的路由,即/name/xyz

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2015-07-10
    相关资源
    最近更新 更多