我试图弄清楚如何在 API 调用中正确使用我的验证管道和类验证器。
我有一个带有类验证器装饰器的 DTO,其行为符合预期。但是,我想利用“skipMissingProperties”来忽略对不存在的东西的验证(例如屏幕截图中的“名称”)。
我的意图是能够拥有一个使用许多装饰器的简单 DTO,并跳过对那些不存在的装饰器的验证。
不幸的是,我对 skipMissingProperties 的使用似乎不正确,因为提供此选项仍然会从 DTO 中引发验证错误。
我如何使用验证管道 skipMissingProperties 选项以及类验证器装饰器来处理那些确实传入的装饰器?
使用以下代码,如果我使用其他参数发出更新请求,但从正文中排除“名称”,则类验证器会从 DTO 级别引发错误。
API 控制器端点:
@Put(':viewId')
public async updateView(
@Req() request: RequestExtended,
@Param('viewId') viewId: string,
@Body(new ValidationPipe({ skipMissingProperties: true })) updateView: UpdateViewDto)
: Promise<View> {
// Do some API stuff
}
更新视图DTO:
export class UpdateViewDto {
@IsString()
@MinLength(1, {
message: LanguageElements.VIEW_NAME_REQUIRED_ERROR_MSG,
})
@MaxLength(50, {
message: LanguageElements.VIEW_NAME_TOO_LONG_ERROR_MSG,
})
public readonly name?: string;
// Other properties
}