如何在ExpressJS中使用多路径?

如何在ExpressJS中使用多路径?,express,express-router,Express,Express Router,有可能在ExpressJS中制作这样的路由器吗 users.js const userController='../controllers/userController.js'; router.get'/:userName',userController.paramByUsername; router.get'/:id',userController.paramByUserId; 在控制器中,代码如下所示 userController.js 函数paramByUsernamereq,res{

有可能在ExpressJS中制作这样的路由器吗

users.js

const userController='../controllers/userController.js'; router.get'/:userName',userController.paramByUsername; router.get'/:id',userController.paramByUserId; 在控制器中,代码如下所示 userController.js

函数paramByUsernamereq,res{ User.findOne{ 其中:{ userId:req.params.userId } } .thenuser=>{ 如果!用户{ 返回res.status404.json{message:User not found.}; } 返回res.status200.jsonuser; } .catcherror=>{ 返回res.status400.jsonerror; }; } 函数paramByUserIdreq,res{ User.findByPkreq.params.id .thenuser=>{ 如果!用户{ 返回res.status404.json{message:User not found.}; } }.catcherror=>{ 返回res.status400.jsonerror; }; } 通过上面的代码,我想要实现的是这样的端点: /users/1此响应应与/users/username相同。
我已经尝试了上面的代码,但是当我得到/users/:id时,我看到一个错误。您不能同时执行这两个操作:

router.get('/:userName', userController.paramByUsername);
router.get('/:id', userController.paramByUserId);
从纯路由的角度来看,没有办法区分这两者之间的区别。无论你首先宣布的是哪条路线,它都会抓住顶层的所有东西,而第二条路线永远不会被击中

因此,在路线设计中,您必须确保根据您在路线模式中放置的内容,快速路线匹配器能够唯一识别每条路线

我想如果一个id总是数字,一个用户名永远不可能只是数字,那么你可以使用正则表达式路由,只匹配id的数字,匹配用户名的其他所有内容,但这对我来说似乎有点脆弱,我更喜欢更明确一点的内容

我不知道你的应用程序的总体情况,但你可能想:

router.get('/user/:userName', userController.paramByUsername);
router.get('/id/:id', userController.paramByUserId);
或者,您可以将查询字符串与URL一起使用,如下所示:

/search?user=John
/search?id=4889
然后,你只有一条路线:

router.get("/search", ....);

您将检查req.query中存在哪些属性,以确定要查找的项目。

我认为您的路径应该是get'/users/:id'。没有得到“/:id”?我正在定义它。所以在这个问题上,我只想知道上面的编码是否可行。好的,这个答案是有意义的。非常感谢。