表达区分动态段和其他静态段

时间:2019-04-28 07:43:19

标签: node.js rest express

const route = Router();
router.get('user/:UserId');
router.post('user/:UserId');
router.put('user/:UserId');

我具有用户REST API的上述路由,我希望按位置api拥有一个用户。所以我尝试了以下类似的方法。

router.get('user/getUserByLocation');

问题在于,它在找到getUserByLocation作为UserId时调用了router.get('user/:UserId');

我将router.get('user/getUserByLocation');更改为router.get('getUserByLocation');

我的问题是,上述解决方案是最好的方法,还是我需要使用带有查询字符串的router.get('user');来获取getUserByLocation。

2 个答案:

答案 0 :(得分:0)

您必须在getUserByLocation之前配置router.get('user/:UserId')。更改代码的顺序。首先配置router.get('user/getUserByLocation')

明确地说,将执行第一个匹配请求处理程序,因此如果在router.get('user/getUserByLocation')之后配置了router.get('user/:UserId')。那会在那之前被调用。

const route = Router();

router.get('user/getUserByLocation');

router.get('user/:UserId');
router.post('user/:UserId');
router.put('user/:UserId');

答案 1 :(得分:0)

您可以在路由器中使用:UserId声明(\\d+)应该是数字(而不是字符串)。这样user/getUserByLocation不应与您的路线user/:UserId匹配:

const route = Router();

router.get('user/:UserId(\\d+)');
router.post('user/:UserId(\\d+)');
router.put('user/:UserId(\\d+)');

router.get('user/getUserByLocation');
相关问题