在NestJS中将Swagger文档生成为JSON/YAML

vcirk6k6  于 2022-11-06  发布在  其他
关注(0)|答案(6)|浏览(378)

我已经遵循了instructions to create a Swagger documentation,我的文档现在可以使用Swagger UI了。我还想生成JSON或YAML格式的文档,这样就可以很容易地导入到Postman中,但是我在SwaggerModule中找不到任何合适的方法,Swagger UI也没有任何导出按钮。

edqdpe6u

edqdpe6u1#

根据这个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);
z18hc3ub

z18hc3ub2#

如果您关注 https://docs.nestjs.com/recipes/swagger,请尝试访问/api/json而不是/api-json

eyh26e7m

eyh26e7m3#

Nestjs v9中测试
假设docs路径如下

http://localhost:3000/docs

获取JSON

http://localhost:3000/docs-json

获取YAML

http://localhost:3000/docs-yaml
tez616oj

tez616oj4#

除了所示的写入磁盘(https://stackoverflow.com/a/51736406/5693245)的解决方案之外,您仍然可以在自己的API端点上进行访问。
根据docs,根据使用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

yizd12fk

yizd12fk5#

在Nestjs v8中测试

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

获取JSON

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

ecbunoof6#

使用NestJS的最新版本(在编写本文时为v8),按照openapi documentation中的设置,您应该能够访问json文档,而无需使用

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

相关问题