我正在根据此文档在我的小型 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 中的确切参数时,它会以大摇大摆的方式正确显示它。
- 我对接口进行了 dto 的交叉检查,我在“isOnline”中添加了错误的字段,它找到并标记它,它不好。
- 架构以大摇大摆的方式显示,但也仅显示顶级,而不是键入的部分。所以它不仅仅是示例值。
- 检查堆栈溢出;找到了两个相关的线程,但没有一个解决它。一位建议手动创建子 dto 而不是类型。嗯...我最好不要那样做。
我做错了什么,或者错过了文档中的某些内容。或者,该 swagger 模块的解析器在生成 json 时可能无法提取类型/接口。