class-validator и class-transformer

class-validator и class-transformer используются вместе для валидации и преобразования входящих данных (например, тела запроса, параметров) в удобные для работы объекты DTO (Data Transfer Object). Этот подход обеспечивает безопасность и целостность данных на уровне контроллера.

class-validator

  • Основная задача: Проверка данных (валидация). Декораторы накладывают правила на поля DTO.
  • Пример: @IsString(), @IsNumber(), @IsEmail(), @MinLength(8)

class-transformer

  • Основная задача: Преобразование данных. Превращает сырые данные из запроса в экземпляр класса DTO. Также преобразует типы (строку в число, массив строк в массив объектов и т.д.).
  • Пример: @Type(() => Number), @Transform(({ value }) => value.trim())

ValidationPipe

  • Основная задача: Связующее звено. Активирует работу обеих библиотек. Используется глобально или на уровне контроллера.
  • Пример: app.useGlobalPipes(new ValidationPipe({ transform: true }))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { IsString, IsEmail, IsInt, Min, Length } from 'class-validator';import { Type, Transform } from 'class-transformer'; export class CreateUserDto { @IsString() @Length(2, 30) @Transform(({ value }) => value.trim()) // Убираем пробелы в начале и конце name: string; @IsEmail() @Min(18) @Type(() => Number) // Явно преобразуем строку из запроса в число age: number;}