我用的是 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似乎工作得很好,但我怎样才能解决我的。APIParam
和 APIQuery
装饰器?
@ApiQuery
和 @ApiParam
当使用命名的参数查询时需要,如 @Query('pageSize')
o @Param('id')
. 在这种情况下,NestJS Swagger模块应该提取信息。径直 从指定的DTO对象中获取,比如。
async findElements(@Query() query: ElementsQueryDto) {
// ...
}
需要注意的是,Dtos应该是类,而不是接口。