Как работает класс-валидатор? - PullRequest
1 голос
/ 03 марта 2020

У меня есть приложение с Nest Js с сервером и клиентом отдельно, на стороне сервера я использую ValidationPipe и использую декораторы для классов DTO, например

export class SearchDto {
   @IsOptional()
   readonly offset?: string;

   @IsString()
   readonly value: string;

   @IsNumber()
   readonly limit: number;
}

И все работает нормально, но на на стороне клиента я не могу использовать классы с декораторами (это строгое правило), и мне просто нужно использовать его как type, - const search: SearchDto = await...

Как class-validator (class-transformer) работает, когда нет над ней 1011 *? Это завернуто как на стороне сервера или полностью проигнорировано? он вызывает __decorate и помещает его в js связку?

В противном случае мне нужно написать такие интерфейсы, как это

export class SearchDto implements ISearchDto {
   @IsOptional()
   readonly offset?: string;

   @IsString()
   readonly value: string;

   @IsNumber()
   readonly limit: number;
}

export interface ISearchDto {
  offset?: string;
  value: string;
  limit: number;
}

let decorated: SearchDto;
let nonDecorated: ISearchDto;

Спасибо за помощь

1 Ответ

2 голосов
/ 03 марта 2020

Если вам не разрешено использовать классы с декораторами, вы можете захотеть использовать class-validator со схемами , так что декораторы не нужны.

Class-validator работает устанавливая метаданные о полях через декораторы, которые он использует, и может делать только столько только для одного типа. Затем библиотека считывает эти метаданные и проверяет их на соответствие текущему типу объекта / поля и определяет, выполняются ли его условия. Библиотека автономна, поэтому ей не нужно go подключаться к серверу или чему-либо еще. Если вы посмотрите на исходный код для ValidationPipe, то увидите, что Nest просто преобразует объект с помощью class-transformer (также известный как десериализация), чтобы сделать объект JSON JavaScript. Class, затем запускает этот класс через class-validator, проверяет результаты и возвращает либо экземпляр объекта (если в опциях установлено transform: true), либо исходную полезную нагрузку после проверки.

Метаданные, определенные этими декораторами, могут быть имитированы через файл схемы, как описано в первой ссылке выше.

...