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

Express子路由router如何无需在每个路由中指定完整路径

解决方案

你只需要调整子路由的挂载方式即可,核心修改点如下:

  • 父路由挂载子路由时使用use方法直接指定路径前缀,不要加/*通配符
  • 子路由内定义接口路径直接写相对前缀的路径即可

修改后的完整代码示例:

const mainRouter = express.Router();
const bananaRouter = express.Router();
const appleRouter = express.Router();

// 子路由内直接写相对路径即可,最终实际路径为 /banana/hello
bananaRouter.get('/hello', (req, res) => { /* ... */ });

// 直接指定前缀挂载子路由,不要加/*
mainRouter.use('/banana', bananaRouter);
mainRouter.use('/apple', appleRouter);

原理解释

你之前的写法用all('/banana/*', bananaRouter)时,Express会把完整的请求路径传递给子路由做匹配,所以子路由需要写全/banana/hello才能匹配成功。
改为用use('/banana', bananaRouter)挂载后,Express会自动剥离路径中的/banana前缀,只把剩余部分传递给子路由匹配,因此子路由只需要写/hello就可以对应到完整路径/banana/hello。

附加说明

如果你后续需要在子路由中获取父路由路径上的参数,可以在创建子路由时开启mergeParams配置:

const bananaRouter = express.Router({ mergeParams: true });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:09:00