Использование валидационной трубы с валидатором класса
Я пытаюсь выяснить, как правильно использовать мой канал проверки и валидатор класса при вызове API.
У меня есть DTO с декораторами валидатора класса, который ведет себя как ожидалось. Тем не менее, я хотел бы использовать 'skipMissingProperties', чтобы игнорировать проверку в отношении вещей, которых нет (например, 'name' на скриншотах).
Мое намерение состоит в том, чтобы иметь возможность иметь простой DTO, который использует несколько декораторов, и пропустить проверку тех, которых нет.
К сожалению, мое использование skipMissingProperties кажется неправильным, поскольку предоставление этой опции все еще приводит к ошибкам проверки из DTO.
Как я могу использовать опцию validation-pipe skipMissingProperties вместе с декораторами валидатора класса для тех, которые действительно передаются?
В следующем коде, если я сделаю запрос на обновление с другими параметрами, но исключу "имя" из тела, валидатор класса выдает ошибки с уровня DTO.
Скриншот проверки трубы на контроллере
Скриншот UpdateViewDTO в декораторы
Конечная точка контроллера 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 ответов
В вашем main.ts
, можете добавить skipMissingProperties: true
прямо в ValidationPipe.
app.useGlobalPipes(
new ValidationPipe({
skipMissingProperties: true,
exceptionFactory: (errors: ValidationError[]) => {
return new BadRequestException(errors[0].constraints);
},
}),
);