基于参数的express.js中的路由器

时间:2016-09-16 05:46:35

标签: javascript node.js express

我在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')
});

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

2 个答案:

答案 0 :(得分: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')
});

问题在于定义路由的顺序,因为当您点击/:username时,两条路线都有http://localhost:3000/myname/profile.,因此第一条路线与uri相匹配,因此会优先选择路线。

另请参阅此stackoverflow帖子关于快速路线命名和订购 - Node.js Express route naming and ordering: how is precedence determined?

答案 1 :(得分:0)

你确定吗?我尝试了您的代码并触发了run user profile。您可以显示所有代码。