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

使用tsoa与swagger-ui时如何为路由添加多类静态路径前缀

tsoa多路径前缀配置解决方案

方案1:控制器层级指定路由前缀(原生支持,适配绝大多数场景)

直接在控制器的@Route装饰器中补全完整前缀即可,无需修改全局baseDir配置:

  • 需走/public前缀的控制器写法示例:
import { Route, Controller, Get } from 'tsoa';

@Route('/public/pets')
export class PublicPetsController extends Controller {
  @Get('/')
  public async getPets() {
    // 接口逻辑
  }
}
  • 需走/secured前缀的控制器写法示例:
import { Route, Controller, Get, Security } from 'tsoa';

@Route('/secured/pets')
export class SecuredPetsController extends Controller {
  @Security('jwt')
  @Get('/')
  public async getSecuredPets() {
    // 接口逻辑
  }
}

该方式生成的swagger路径会自动携带前缀,最终接口路径为http://你的域名/public/pets、http://你的域名/secured/pets,符合需求。

方案2:多配置文件生成独立路由(适合两类接口完全隔离的场景)

如果/public和/secured两类接口需要完全拆分、独立配置鉴权中间件,可采用多套tsoa配置的方案:

  1. 新建两套tsoa配置文件
    • tsoa-public.json:配置basePath为/public,指定仅扫描public类控制器所在目录,路由输出路径设为src/routes/public.ts,openapi spec输出路径设为public/swagger-public.json
    • tsoa-secured.json:配置basePath为/secured,指定仅扫描secured类控制器所在目录,路由输出路径设为src/routes/secured.ts,openapi spec输出路径设为public/swagger-secured.json
  2. 修改生成命令,同时运行两套配置的生成逻辑:
{
  "scripts": {
    "tsoa:gen": "tsoa spec-and-routes -c tsoa-public.json && tsoa spec-and-routes -c tsoa-secured.json"
  }
}
  1. 服务启动时分别挂载路由,可直接给不同前缀绑定全局中间件:
// express示例
import express from 'express';
import { RegisterRoutes as registerPublicRoutes } from './routes/public';
import { RegisterRoutes as registerSecuredRoutes } from './routes/secured';
import jwtAuth from './middleware/jwtAuth';

const app = express();
app.use(express.json());
// 公开接口直接挂载
registerPublicRoutes(app);
// 鉴权接口统一加jwt校验中间件
app.use('/secured', jwtAuth);
registerSecuredRoutes(app);

如果需要合并swagger文档展示,可在swagger-ui初始化时合并两份spec,或者单独做两个swagger入口分别对应两类接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:03