“nestjs/swagger”中的哪个函数将 DTO 转换为 Swagger 模型定义?

Posted

技术标签:

【中文标题】“nestjs/swagger”中的哪个函数将 DTO 转换为 Swagger 模型定义?【英文标题】:Which function in "nestjs/swagger" converts DTOs to Swagger model definitions? 【发布时间】:2020-03-25 12:41:26 【问题描述】:

我使用Class-Validator 指定了 DTO,我正在寻找一个可用于从中生成 Swagger 规范的库。我没有将它用于 REST API,代码正在解决 IoT/MQTT 场景 - 我只是使用 Class-Validator 来管理 JSON。

NestJS/Swagger 是维护最好的库。我想使用它的能力在没有 NestJS 服务器的情况下生成 Swagger 定义。理想情况下,我想传入一个 DTO 定义并获得它的 Swagger 模式。

我一直在阅读源代码,但很难理解框架中的哪个函数实际上是这样做的。充其量,我已经能够追踪到modelsDefinitions property in swagger-explorer class。

据我所知,api-parameters.explorerapi-produces.explorer。我不清楚他们的工作方式。我想知道有人可以帮助我吗?

我想补充一点,我知道class-validator-jsonschema,但它没有得到维护,似乎不再正常工作。

【问题讨论】:

index.ts 导出的主模块好像是 github.com/nestjs/swagger/blob/master/lib/swagger-module.ts ,好像用到了 fastify-swagger 和 swagger-ui-express 等库以及一堆自定义代码。您是否有机会查看该代码以及它如何与标准 Nest 项目一起使用? 是的,我试图追踪 swagger-module 调用了哪些代码,结果卡在了上面的大纲中。我认为 Swagger ui 和 fastify 与构建模型无关。 【参考方案1】:

nestjs/swagger 不会将您需要的内容公开为您无法访问的公共 API。您要查找的类是SchemaObjectFactory,方法是exploreModelSchema

参考:

SwaggerObjectFactory Test

【讨论】:

以上是关于“nestjs/swagger”中的哪个函数将 DTO 转换为 Swagger 模型定义?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nestjs/swagger 更改查询参数序列化?

Nestjs Swagger 4 的循环依赖

所有控制器的全局标头(nestJs swagger)

NestJs Swagger:如何为动态类定义 Api 属性

@nestjs/swagger:是不是可以防止网络钓鱼?

NestJS/swagger:ApiExtraModel 期望啥模型作为参数?