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

我有express.js声明这些路由器,我想知道为什么run user触发当我打开本地主机:3000 / myname /configuration文件。

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

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

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

 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 http://localhost:3000/myname/profile. ,第一条路线是优先的,因为它匹配uri。

在快速路由命名和sorting中也请参考这个stackoverflow文章 – Node.js快速路由命名和sorting:如何确定优先级?

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