我正在根据以下文档在我的小型Nest.js应用中设置摇摇欲坠的文档:https://docs.nestjs.com/recipes/swagger
我的问题是,如何设置dto以正确显示摇摇欲坠的架构?更具体地说,嵌套类型。它仅显示顶级键。如果其中一个键是某种类型的键,它将显示为空对象。这是我的意思:
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);
}
我尝试过的:
我做错了什么,或者错过了文档。也许那个招摇模块的解析器在生成json时无法提取类型/接口。不知道。
有人知道吗?
谢谢!
答案 0 :(得分:3)
我错过了文档中的一个地方:
https://docs.nestjs.com/recipes/swagger#generics-and-interfaces
由于TypeScript不存储有关泛型或接口的元数据, 当您在DTO中使用它们时,SwaggerModule可能无法 在运行时正确生成模型定义。
嗯,很有意义。
在某些特定情况下(例如,深度嵌套的数组,矩阵), 可能想手动描述您的类型。
编辑
因此,适用于我的最终设置如下
Result<SomeDto>
像此数据一样有效,可以正确生成摇号。有关其他摇摇欲坠的信息,请直接在DTO中使用装饰器。