【问题标题】:How can I share a root path using Express?如何使用 Express 共享根路径?
【发布时间】:2022-02-18 03:55:37
【问题描述】:

我希望能够有两个端点共享根路径,两者都用于不同的目的。 一种是通过其 ID 获取用户,另一种是通过令牌获取。

现在我有以下路线:

router.get('/:idUser', paramValidationRules(), validate, verifyJWT, getUserFromId);
router.route('/me').get(verifyJWT, getUserFromToken);

运行测试,第二条路线上的“我”被视为一个参数,并将其重定向到第一条路线。是否可以共享一个根路径,指定一个将严格用于“我”,另一个用于整数?

【问题讨论】:

  • 不推荐使用像/:idUser这样的顶级通配符路由。这特别是因为它会干扰您使用任何其他顶级路由的能力,即使您将其他路由放在首位,以便它们在通配符之前拦截请求,您也会冒最终用户创建与您的用户 ID 冲突的风险顶级路线。

标签: node.js express endpoint


【解决方案1】:

首先,你总是在/me 之前点击/:idUser,所以它总是会停在/:iduser 并且永远不会对我做出反应。

所以要解决你永远无法访问/me 的问题,请将/me 路由声明放在/:idUser 之前。

至于仅捕获数字,没有内置方式,但您可以使用中间件(并将您的路线顺序更改为原始路线):

router.get('/:idUser', function(req, res, next) {
  req.id = /^\d+$/.test(req.params.idUser);
  next();
}, paramValidationRules(), validate, verifyJWT, getUserFromId);

然后,(不幸的是)在你所有的中间件和处理程序(或只是处理程序)中打开函数添加:

if(!req.id)
  return next();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    相关资源
    最近更新 更多