【发布时间】:2020-07-12 04:06:18
【问题描述】:
我正在根据此文档在我的小型 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”中添加了错误的字段,它找到并标记它,它不好。
- Schema 以大摇大摆的方式显示,但也只是顶级,而不是类型化的部分。所以它不仅仅是示例值。
- 检查堆栈溢出;找到了两个相关的线程,但没有一个解决它。一位建议手动创建子 dto 而不是类型。嗯……我最好不要那样做。
我做错了什么,或遗漏了文档中的某些内容。或者,在生成 json 时,该 swagger 模块的解析器可能无法提取类型/接口。
【问题讨论】:
标签: javascript nestjs nestjs-swagger