【问题标题】:router in express.js base on parametersexpress.js中的路由器基于参数
【发布时间】:2017-01-24 06:26:45
【问题描述】:

我在 express.js 中声明了这些路由器,我想知道为什么当我打开 localhost:3000/myname/profile 时会触发 run user。

router.get('/:username', function(req, res, next)
{
    console.log('run user')
});

router.get('/:username/profile', function(req, res, next)
{
    console.log('run user profile')
});

我希望它不会,如何解决? 请有人帮助我吗? 提前谢谢你....

【问题讨论】:

  • 我无法重现该问题。请发送其余代码。
  • 真的发生了吗?

标签: javascript node.js express


【解决方案1】:

只需重新排列代码,如下所示,您的代码应该可以正常工作。

router.get('/:username/profile', function(req, res, next)
{
   console.log('run user profile')
});

router.get('/:username', function(req, res, next)
{
    console.log('run user')
});

问题在于定义路由的顺序,因为当您点击http://localhost:3000/myname/profile. 时,两条路由都有/:username,所以优先考虑第一个路由,因为它与uri 匹配。

另请参阅有关快速路线命名和排序的 stackoverflow 帖子 - Node.js Express route naming and ordering: how is precedence determined?

【讨论】:

    【解决方案2】:

    你确定吗?我试过你的代码,它触发了run user profile。你应该显示所有代码。

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      相关资源
      最近更新 更多