Swagger 模块中的前缀 url
Posted
技术标签:
【中文标题】Swagger 模块中的前缀 url【英文标题】:prefix url in Swagger module 【发布时间】:2020-07-02 06:37:05 【问题描述】:我使用 Nest js 和 swagger 作为文档,但 Swagger 模块忽略了 setGlobalPrefix()。 在我的环境中,api前缀是 API_PREFIX=/api/v2 ,我在用邮递员测试它时没有问题,因为端点/url确实可以工作,即http://localhost:5000/api/v2/user/profile
但是swagger无法获取/api/v2前缀,swagger请求url是http://localhost:5000/user/profile这是错误的。
有什么想法吗?感谢您的帮助。
设置
```const SWAGGER_PREFIX = '/docs';
async function bootstrap(): Promise<void>
const app = await NestFactory.create(AppModule);
if (!process.env.SWAGGER_ENABLE || process.env.SWAGGER_ENABLE === '1')
// eslint-disable-next-line @typescript-eslint/no-use-before-define
createSwagger(app);
app.use(bodyParser.json());
app.use(helmet());
app.use(
cors(
origin: process.env.API_CORS || '*'
)
);
app.setGlobalPrefix(process.env.API_PREFIX || API_DEFAULT_PREFIX);
const logInterceptor = app.select(CommonModule).get(LogInterceptor);
app.useGlobalInterceptors(logInterceptor);
await app.listen(process.env.API_PORT || API_DEFAULT_PORT);
function createSwagger(app: INestApplication)
const version = require('../package.json').version || '';
const options = new DocumentBuilder()
.setTitle(SWAGGER_TITLE)
.setDescription(SWAGGER_DESCRIPTION)
.setVersion(version)
.setBasePath(process.env.API_PREFIX || API_DEFAULT_PREFIX)
.addBearerAuth()
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup(SWAGGER_PREFIX, app, document);[![enter image description here][1]][1]
//swagger - the request url is http://localhost:5000/user/profile
which is supposed to be http://localhost:5000/api/v2/user/profile
【问题讨论】:
【参考方案1】:在设置 api 的全局前缀(在函数 bootstrap
中调用 setGlobalPrefix
)后,您应该创建招摇(在函数 bootstrap
中调用 createSwagger
)。然后它会自行查找 api 前缀,并在任何请求前添加它。
async function bootstrap(): Promise<void>
const app = await NestFactory.create(ApplicationModule);
app.setGlobalPrefix(process.env.API_PREFIX || API_DEFAULT_PREFIX);
if (!process.env.SWAGGER_ENABLE || process.env.SWAGGER_ENABLE === 'true')
createSwagger(app);
await app.listen(process.env.API_PORT || API_DEFAULT_PORT);
function createSwagger(app: INestApplication)
const version = require('../package.json').version || '';
const options = new DocumentBuilder()
.setTitle(SWAGGER_TITLE)
.setDescription(SWAGGER_DESCRIPTION)
.setVersion(version)
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup(SWAGGER_PREFIX, app, document);
【讨论】:
【参考方案2】:你确定这条线
app.setGlobalPrefix(process.env.API_PREFIX || API_DEFAULT_PREFIX);
这一行的计算结果相同
.setBasePath(process.env.API_PREFIX || API_DEFAULT_PREFIX)
【讨论】:
以上是关于Swagger 模块中的前缀 url的主要内容,如果未能解决你的问题,请参考以下文章
***模块代码中的 Python @ (at) 前缀 - 它代表啥? [复制]
Spring Boot - Swagger - Swagger 不会将标准值更改为多模块项目的 ApiInfo/GlobalResponse