为Apiaram和ApiQuery定义DTO。

问题描述 投票:3回答:1

我用的是 nestjs swagger模块 并想创建我的API文档。对于依赖于请求体的端点,我可以给文档分配一个DTO类,比如说

@ApiBody({ type: CreateUserDTO })

有些端点还依赖于请求params或查询。对于params,我会做一些类似于

@ApiParam({ type: GetUserByIdDTO })

(我知道这是个不好的例子,因为用户id不需要DTO,但我们假设你想用一个DTO类来验证你的参数,使用class-validator)

但我得到这个错误

类型'{ type: typeof GetUserByIdDTO; }'的参数不能分配给类型'ApiParamOptions'的参数。 在类型'{ type: typeof GetUserByIdDTO; }'中缺少属性'name',但在类型'ApiParamMetadata'中需要。

对于查询,我会做一些类似于

@ApiQuery({ type: GetUsersDTO })

并得到以下错误信息

类型'{ type: typeof GetUsersDTO; }'的参数不可分配给类型'ApiQueryOptions'的参数。 属性'name'在类型'{ type: typeof GetUsersDTO; }'中缺失,但在类型'ApiQueryMetadata'中需要。

因此 APIBody decorator似乎工作得很好,但我怎样才能解决我的。APIParamAPIQuery 装饰器?

swagger nestjs
1个回答
1
投票

@ApiQuery@ApiParam 当使用命名的参数查询时需要,如 @Query('pageSize') o @Param('id'). 在这种情况下,NestJS Swagger模块应该提取信息。径直 从指定的DTO对象中获取,比如。

async findElements(@Query() query: ElementsQueryDto) {
  // ...
}

需要注意的是,Dtos应该是类,而不是接口。

© www.soinside.com 2019 - 2024. All rights reserved.