2016-09-16 86 views
2

我有这些路由器express.js中声明,我想知道为什么run user被触发时,我打开本地主机:3000/myname /配置文件。路由器在express.js根据参数

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

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

我希望它不会,如何解决? 请任何人帮助我? 预先感谢您......

+0

我无法重现该问题。请发送其余的代码。 –

+0

真的发生了吗? – Beginner

回答

0

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

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匹配的第一个路由被优先考虑。

也可参考使用快递路线命名和排序这个计算器后 - Node.js Express route naming and ordering: how is precedence determined?