Вы не можете сделать оба этих вместе:
router.get('/:userName', userController.paramByUsername);
router.get('/:id', userController.paramByUserId);
С точки зрения чистой маршрутизации, нет никакого способа определить разницу между этими двумя. Какой бы маршрут вы ни объявили первым, вы получите все на верхнем уровне, а второй никогда не попадет.
Таким образом, при разработке маршрута вы ДОЛЖНЫ убедиться, что каждый маршрут уникально распознается для Express сопоставителя маршрутов. основываясь на том, что вы указали в шаблоне маршрута.
Я полагаю, что если id
всегда было просто числами, а имя пользователя никогда не могло быть просто числами, то вы могли бы использовать маршрут регулярного выражения и сопоставлять только числа для id и все остальное для имени пользователя, но это мне кажется чуть более agile, и я бы предпочел что-то более явное.
Я не знаю общую картину вашего приложения, но вы Возможно, вы захотите сделать:
router.get('/user/:userName', userController.paramByUsername);
router.get('/id/:id', userController.paramByUserId);
Или вы можете использовать строку запроса с URL-адресами, например:
/search?user=John
/search?id=4889
И тогда у вас будет только один маршрут:
router.get("/search", ....);
И вы должны проверить, какие свойства присутствуют в req.query
, чтобы решить, какой элемент вы ищете.