gpt4 book ai didi

javascript - 为什么 dto 中的类型在 swagger 中不可见?

转载 作者:行者123 更新时间:2023-12-03 16:21:50 24 4
gpt4 key购买 nike

我正在根据以下文档在我的小型 Nest.js 应用程序中设置 swagger 文档:https://docs.nestjs.com/recipes/swagger
如何设置 dto 以在 swagger 中正确显示架构?更具体地说,嵌套类型。它仅显示顶级键。如果其中一个键是某种类型的,它会将其显示为空对象。这就是我的意思:
dto:

export class HealthCheckDataDto {
serverStatus: {} // dont have it typed yet;
dbStatus: MongoConnectionStateT;
}
昂首阔步:
[
{
"serverStatus": {},
"dbStatus": {}
}
]
招摇示例值的预期结果:
[
{
"serverStatus": {},
"dbStatus": {
"isOnline": true,
"msg": "string"
}
}
]
这是功能:
@ApiResponse({ status: 200, description: 'blabla', type: [HealthCheckDataDto] })
@ApiResponse({ status: 500, description: 'blabla, but bad', type: [HealthCheckDataDto] })
@Get('/api/healthcheck')
healthCheckApp(@Res() res: Response<HealthCheckDataDto>) {

// check HCs and setup status code
const healthCheck: HealthCheckI = this.healthcheckService.getFullHealthCheck();
const statusCode = (healthCheck.dbStatus.isOnline) ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR;

// return that response
res.status(statusCode).json(healthCheck);
}
我尝试了什么:
  • 当我将类型替换为 dto 中的确切参数时,它会以大摇大摆的方式正确显示它。
  • 我对接口(interface)进行了 dto 的交叉检查,我在“isOnline”中添加了错误的字段,它找到并标记它,它不好。
  • 架构以大摇大摆的方式显示,但也仅显示顶级,而不是键入的部分。所以它不仅仅是示例值。
  • 检查堆栈溢出;找到了两个相关的线程,但没有一个解决它。一位建议手动创建子 dto 而不是类型。嗯...我最好不要那样做。

  • 我做错了什么,或者错过了文档中的某些内容。或者,该 swagger 模块的解析器在生成 json 时可能无法提取类型/接口(interface)。

    最佳答案

    我错过了 NestJS Documentation: Generics and interfaces 中的一个位置:

    Since TypeScript does not store metadata about generics or interfaces,when you use them in your DTOs, SwaggerModule may not be able toproperly generate model definitions at runtime.


    嗯,这是有道理的。

    In some specific scenarios (e.g. deeply nested arrays, matrices), youmay want to describe your type by hand.


    因此,对我有用的最终设置如下
  • 创建没有类型的 DTO,但匹配类型/接口(interface)结构,就像在原始问题
  • 中的“预期结果”中一样
  • 请求/响应应使用 dto 键入,例如 Result<SomeDto>
  • 当您在该函数中处理数据时,请使用 interface/type 键入它,而不是 dto 并进行交叉检查。

  • 像这个数据是有效的,swagger 是正确生成的。有关其他招摇信息,请直接在 DTO 中使用装饰器。

    关于javascript - 为什么 dto 中的类型在 swagger 中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60953406/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com