我试图弄清楚如何在API调用中正确使用我的验证管道和类验证器。
我有一个具有类验证器修饰符的DTO,它的行为符合预期。但是,我想利用'skipMissingProperties'忽略对不存在的事物的验证(例如屏幕快照中的'name')。
我的目的是拥有一个使用多个装饰器的简单DTO,并跳过对不存在的装饰器的验证。
不幸的是,我对skipMissingProperties的使用似乎不正确,因为提供此选项仍会引发DTO内部的验证错误。
如何将验证管道的skipMissingProperties选项与类验证器修饰符一起用于那些确实要传入的修饰符?
使用以下代码,如果我使用其他参数发出更新请求,但从主体中排除“名称”,则类验证器会从DTO级别引发错误。
Validation Pipe on Controller Screenshot
UpdateViewDTO's decorators Screenshot
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
}
UpdateViewDTO:
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
}
答案 0 :(得分:0)
在您的main.ts
中,您可以将skipMissingProperties: true
添加到ValidationPipe中。
app.useGlobalPipes(
new ValidationPipe({
skipMissingProperties: true,
exceptionFactory: (errors: ValidationError[]) => {
return new BadRequestException(errors[0].constraints);
},
}),
);