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

如何在单个Express应用中配置多份SwaggerUI文档?

在单个Express应用中配置多份Swagger UI文档

针对你使用的依赖版本(typescript: ^2.5.2、swagger-tools: ^0.10.1、express: ^4.15.3、express-openapi: ^1.0.1),可以通过为不同Swagger文档创建独立路由前缀的方式实现多份Swagger UI的配置,具体步骤如下:

1. 拆分独立的Swagger文档资源

首先把不同模块/版本的API文档拆分开,确保每份文档的全局配置和paths完全独立:

// 示例:业务模块A的Swagger文档
const swaggerDocModuleA = {
  openapi: '3.0.0', // 匹配你实际使用的Swagger版本
  info: { title: '业务模块A API', version: '1.0.0' },
  // 其他全局配置(如servers、components等)
};
const pathsModuleA = { /* 模块A的接口paths定义 */ };

// 示例:业务模块B的Swagger文档
const swaggerDocModuleB = {
  openapi: '3.0.0',
  info: { title: '业务模块B API', version: '1.0.0' },
  // 其他全局配置
};
const pathsModuleB = { /* 模块B的接口paths定义 */ };

2. 为每份文档初始化独立的express-openapi实例

利用Express的子路由(Router)隔离不同文档的实例,避免相互干扰:

import express from 'express';
import Openapi from 'express-openapi';
import swaggerUI from 'swagger-ui-express'; // 按你实际引入的Swagger UI包调整

// 为模块A创建子路由并初始化openapi
const moduleARouter = express.Router();
const openapiModuleA = Openapi.initialize({
  paths: pathsModuleA,
  expressApp: moduleARouter, // 绑定到子路由而非主app
  swaggerApiDoc: swaggerDocModuleA,
});
const specModuleA = openapiModuleA.apiDoc;

// 为模块B创建子路由并初始化openapi
const moduleBRouter = express.Router();
const openapiModuleB = Openapi.initialize({
  paths: pathsModuleB,
  expressApp: moduleBRouter,
  swaggerApiDoc: swaggerDocModuleB,
});
const specModuleB = openapiModuleB.apiDoc;

3. 挂载到不同路由前缀

最后把API接口和对应的Swagger UI分别挂载到主应用的不同路径下:

// 挂载模块A的API和Swagger UI
app.use('/api/module-a', moduleARouter); // 模块A的接口访问路径
app.use('/docs/module-a', swaggerUI.serve, swaggerUI.setup(specModuleA)); // 模块A的Swagger UI页面

// 挂载模块B的API和Swagger UI
app.use('/api/module-b', moduleBRouter); // 模块B的接口访问路径
app.use('/docs/module-b', swaggerUI.serve, swaggerUI.setup(specModuleB)); // 模块B的Swagger UI页面

额外注意事项

  • 如果你使用的是swagger-tools自带的UI而非swagger-ui-express,可以通过swagger-tools.initializeMiddleware为每份文档生成独立的UI中间件,再绑定到对应路由;
  • 由于你的TypeScript版本较低(^2.5.2),遇到类型兼容问题时可以临时用any来绕过类型检查;
  • 确保每份Swagger文档的paths里的接口路径不会和其他模块的路由冲突。

内容的提问来源于stack exchange,提问作者An-droid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:47