You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express中带路径参数的路由全部被强制鉴权问题问询

这不是Express路由缓存机制导致的,本质是Express路由按定义顺序匹配的规则触发的问题:

  1. Express的路由匹配逻辑为从前到后逐一校验,只要命中第一个符合路径规则的路由就会终止匹配,不会自动选择精准度更高的路由。
    你第一个定义的路由为带两层动态参数的规则:
router.get(
  "/:type/:id",
  passport.authenticate("jwt", { session: false }),
  getOne
);

所有/[任意字符串]/[任意字符串]格式的路径都会命中这个路由,直接触发jwt鉴权中间件。你后续定义的/my-search/:term、/search/:term刚好都是两层路径结构,完全符合该动态路由的匹配规则,因此永远不会被执行。
2. 移除:term后接口正常的原因:去掉参数后路由变为单段路径/my-search,不符合两层路径的动态路由规则,会继续向后匹配到对应路由,因此不会触发鉴权。

修复方案

  • 调整路由定义顺序,把固定前缀的精准路由放在动态参数路由之前:
// 先写固定前缀路由
router.get("/my-search/:term", (req, res) => res.json({ hi: "joe" }));
router.get("/search/:term", search);
// 最后写通配性更高的动态参数路由
router.get(
  "/:type/:id",
  passport.authenticate("jwt", { session: false }),
  getOne
);
  • 给动态参数路由增加专属前缀做隔离,比如改为/detail/:type/:id,避免和其他业务路由的路径结构冲突。

内容的提问来源于stack exchange,提问作者Merim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:21:01