在NestJS中生成Swagger文档的JSON/YAML

22

我已经按照创建Swagger文档的说明进行了操作,现在我的文档可以通过Swagger UI使用。我希望能够将文档生成为JSON或YAML格式,以便在例如Postman中轻松导入,但是我在SwaggerModule中找不到任何合适的方法,也没有导出按钮。


1
是的,我也一直在想这个问题,NestJS 可能有点晦涩。 - Lars Holdaas
6个回答

31
根据这个Github问题,您可以将创建的Swagger document转化为字符串,然后像这样将其写入文件系统:
const app = await NestFactory.create(ApplicationModule);
const options = new DocumentBuilder()
    .setTitle("Title")
    .setDescription("description")
    .setVersion("1.0")
    .build();
const document = SwaggerModule.createDocument(app, options);

fs.writeFileSync("./swagger-spec.json", JSON.stringify(document));
SwaggerModule.setup("/api", app, document);

await app.listen(80);

4
这对我非常有帮助,我添加了一个if条件语句,只在开发环境下保存该文件:if (process.env.NODE_ENV === 'development') - Crysfel
有没有办法将这个导入到Postman作为一个集合? - Elrond
如果出现错误,请尝试像这样导入 fs/path 模块。 import * as fs from 'fs' import * as path from 'path' - aaronmbmorse

18

已测试在 Nestjs v9 中。

假设文档路径如下

http://localhost:3000/docs

获取JSON

http://localhost:3000/docs-json

获取YAML
http://localhost:3000/docs-yaml

http://localhost:3000/docs-json 正常工作。http://localhost:3000/docs-yaml 未找到。 - yunnysunny
1
我刚刚尝试了,两条路线对我都有效。请确保您正在使用最新版本的Nestjs(核心版为10,Swagger版为7)。 - Farid Hajnal

12

在我的情况下,我使用 SwaggerModule.setup('docs', app, document),所以我从 localhost:3000/docs-json 下载json文件。 - Hector
你确定吗?看起来链接的网页引用了“/api-json”。 - Winny
上面的评论是不正确的,直接从链接的文档中获取(截至2023年4月):要生成并下载Swagger JSON文件,请导航到http://localhost:3000/api-json(假设您的Swagger文档可在http://localhost:3000/api下访问)。 - oyalhi

1
除了所示的写入磁盘的解决方案(https://dev59.com/bVUK5IYBdhLWcg3wgQHd#51736406),您仍然可以访问自己的API端点。
根据文档,取决于您使用swagger-ui-express还是fastify提供文档,位置将不同。
要生成和下载Swagger JSON文件,请在浏览器中导航到http://localhost:3000/api-json(swagger-ui-express)或http://localhost:3000/api/json(fastify-swagger)(假设您的Swagger文档可在http://localhost:3000/api下获得)。
这也取决于您从何处提供API,并且假定您使用/api。如果不是这种情况,请替换为您的端点,或者如果您没有使用swagger-ui-express的基本URL,则为http://localhost:3000/-json。

0

已在Nestjs v8中进行了测试

GET http://{host}:{port}/docs

获取JSON

GET http://{host}:{port}/docs/json

0

使用最新版本的NestJS(截至撰写本文为v8),按照OpenAPI文档中的设置,您应该能够在不进行任何额外设置的情况下访问JSON文档。

GET http://{host}:{port}/api-docs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接