Express多层嵌套路由注册失败:如何实现版本化分层API路由?
问题原因
你的分层嵌套路由方案完全可行,路由404是以下三个配置问题导致的:
- 版本前缀重复挂载:你在
api.ts中已经给v1/v2路由加了/v1//v2前缀,又在v1.ts/v2.ts中给user路由重复加了一次版本前缀,导致路径叠加后和预期不符 - 缺少业务模块前缀:user路由挂载时没有加
/user前缀,就算修复重复前缀问题也无法匹配到/user路径 - 可能遗漏全局前缀挂载:如果你的
server.ts中没有将apiRouter挂载到/api前缀,也会导致所有/api开头的请求无法命中路由
修正方案
1. 修正版本入口路由配置
修改v1.ts、v2.ts中的路由挂载规则,移除重复的版本前缀,添加业务模块前缀:
// v1.ts 示例,v2.ts对应修改即可 import { Router } from 'express'; import userRouter from './user'; const v1Router = Router(); // 去掉重复的/v1前缀,改为业务模块名/user v1Router.use('/user', userRouter); export default v1Router;
2. 确认全局路由挂载
确保server.ts中存在以下代码,将全局API路由挂载到/api前缀:
import apiRouter from './api/api'; // 其他服务初始化代码... app.use('/api', apiRouter);
最终路由匹配逻辑
修正后路由层级的路径叠加逻辑如下,完全符合你的预期:
- server.ts 挂载全局前缀:
/api - api.ts 叠加版本前缀:
/api/v1、/api/v2 - 版本入口叠加业务模块前缀:
/api/v1/user、/api/v2/user - user.ts 中的
get('/')最终命中GET /api/v1/user、GET /api/v2/user请求
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

