我正在我的小型Nest.js应用程序中设置swagger文档,根据下面的文档:https://docs.nestjs.com/recipes/swagger
如何设置do以便在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);
}
我试过的是:
我做错了什么,或者在文档中漏掉了什么。或者,这个swagger模块的解析器在生成json时无法提取类型/接口。
发布于 2020-04-01 07:52:20
我错过了NestJS文档:泛型和接口的一个位置
由于TypeScript不存储有关泛型或接口的元数据,所以当您在DTO中使用它们时,SwaggerModule可能无法在运行时正确地生成模型定义。
嗯,这说得通。
在某些特定情况下(例如,深度嵌套数组、矩阵),您可能需要手动描述您的类型。
因此,对我起作用的最终设置如下
Result<SomeDto>
)就像这些数据是有效的一样,swagger也是正确生成的。对于更多的装潢信息,直接在DTO中使用装饰器。
发布于 2021-10-06 13:12:59
您可以使用OpenAPI CLI插件自动显示Swagger中的类型。
添加:
"compilerOptions": {
"plugins": ["@nestjs/swagger"]
}
添加到nest-cli.json
中,并添加:
import { ApiProperty, ApiBody } from '@nestjs/swagger';
对您的每个DTO,插件将自动注释和记录您的模式!
发布于 2022-01-02 03:09:23
根据类型和参数的文档,您只需使用
@Body(), @Query(), @Param()
然后,swagger模块将自动为您填充东西。这还要求您将nest-cli.json
文件更新为
{
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"plugins": ["@nestjs/swagger/plugin"]
}
}
那么所有的事情都应该为你去做和创造。
只要提醒一下,如果这没有自动显示它们或显示模式为空,那么您就可以使用@ApiProperty()
将至少一个dto条目解压缩,然后刷新页面。这会把事情做好的。
https://stackoverflow.com/questions/60953406
复制相似问题