javascript42
Главная
Все учебники
Блог
Учебник Class-validator
Введение
Что такое class-validator
История и эволюция библиотеки
Преимущества использования декораторов для валидации
Сравнение с альтернативными подходами
Когда стоит использовать class-validator
Требования и зависимости
Установка и начальная конфигурация
Установка через npm и yarn
Настройка TypeScript для работы с декораторами
Включение experimentalDecorators и emitDecoratorMetadata
Установка reflect-metadata
Первый пример валидации
Структура проекта для работы с валидацией
Основы валидации
Принцип работы декораторов валидации
Создание класса для валидации
Метод validate и его параметры
Метод validateSync для синхронной валидации
Объект ValidationError
Чтение и интерпретация ошибок валидации
Форматирование сообщений об ошибках
Встроенные декораторы валидации
Валидация строк
Валидация чисел
Валидация дат
Валидация булевых значений
Валидация массивов
Валидация объектов
Проверка типов данных
Декораторы для строковых значений
@IsString
@Length, @MinLength, @MaxLength
@Contains, @NotContains
@IsAlpha, @IsAlphanumeric
@IsAscii
@IsBase64
@IsByteLength
@IsCreditCard
@IsCurrency
@IsDataURI
@IsEmail
@IsFQDN
@IsFullWidth, @IsHalfWidth
@IsHexColor
@IsHexadecimal
@IsIP
@IsISBN
@IsISIN
@IsISO8601
@IsJSON
@IsJWT
@IsLowercase, @IsUppercase
@IsMobilePhone
@IsMongoId
@IsMultibyte
@IsSurrogatePair
@IsURL
@IsUUID
@IsVariableWidth
@Matches для регулярных выражений
Декораторы для числовых значений
@IsNumber
@IsInt
@IsPositive, @IsNegative
@Min, @Max
@IsDivisibleBy
@IsDecimal
@IsLatitude, @IsLongitude
Декораторы для дат
@IsDate
@MinDate, @MaxDate
@IsDateString
Декораторы общего назначения
@IsDefined
@IsOptional
@IsNotEmpty
@IsEmpty
@Equals
@NotEquals
@IsIn
@IsNotIn
@IsBoolean
@IsArray
@IsEnum
@IsInstance
Вложенная валидация
Валидация вложенных объектов с @ValidateNested
Декоратор @Type для трансформации типов
Валидация массивов объектов
Глубокая вложенность и её ограничения
Циклические зависимости
Условная валидация
Декоратор @ValidateIf
Создание условий на основе других полей
Сложные условные конструкции
Группы валидации
Использование групп для различных сценариев
Кастомные декораторы валидации
Создание простого кастомного декоратора
Интерфейс ValidatorConstraintInterface
Синхронные и асинхронные валидаторы
Передача параметров в кастомный декоратор
Доступ к объекту валидации внутри декоратора
Кастомные сообщения об ошибках
Регистрация валидатора через @ValidatorConstraint
Примеры реальных кастомных валидаторов
Асинхронная валидация
Когда необходима асинхронная валидация
Создание асинхронных валидаторов
Валидация с обращением к базе данных
Валидация с внешними API
Обработка ошибок в асинхронных валидаторах
Производительность асинхронной валидации
Настройка сообщений об ошибках
Структура сообщений по умолчанию
Переопределение сообщений через параметр message
Использование функций для динамических сообщений
Доступ к значению и ограничениям в сообщениях
Интернационализация сообщений
Создание централизованного хранилища сообщений
Опции валидации
Параметр skipMissingProperties
Параметр whitelist
Параметр forbidNonWhitelisted
Параметр forbidUnknownValues
Параметр groups
Параметр dismissDefaultMessages
Параметр validationError.target
Параметр validationError.value
Параметр stopAtFirstError
Параметр strictGroups
Трансформация данных
Интеграция с class-transformer
Декоратор @Type для преобразования типов
@Transform для кастомных преобразований
Преобразование вложенных структур
Исключение полей с @Exclude
Включение полей с @Expose
Комбинирование валидации и трансформации
Валидация в Express.js
Создание middleware для валидации
Валидация тела запроса
Валидация параметров запроса
Валидация query-параметров
Обработка ошибок валидации
Форматирование ответов с ошибками
Валидация в NestJS
Встроенная поддержка ValidationPipe
Глобальная настройка валидации
Валидация DTO
Автоматическая трансформация типов
Кастомизация ValidationPipe
Обработка исключений валидации
Валидация в других фреймворках
Интеграция с Koa
Интеграция с Fastify
Использование в GraphQL
Валидация в микросервисах
Работа с формами
Валидация данных форм на клиенте
Синхронизация валидации между клиентом и сервером
Использование с React Hook Form
Использование с Formik
Отображение ошибок в пользовательском интерфейсе
Тестирование валидации
Unit-тестирование классов валидации
Тестирование кастомных валидаторов
Мокирование асинхронных валидаторов
Покрытие тестами различных сценариев
Интеграционное тестирование с валидацией
Производительность и оптимизация
Измерение производительности валидации
Оптимизация сложных валидационных схем
Кеширование результатов валидации
Ленивая валидация
Пакетная валидация множества объектов
Профилирование узких мест
Распространенные паттерны и практики
Организация классов валидации
Переиспользование валидационной логики
Композиция валидаторов
Разделение валидации по слоям приложения
Валидация на границах системы
DTO и их валидация
Обработка ошибок
Структура объекта ValidationError
Извлечение конкретных ошибок
Форматирование ошибок для API
Создание пользовательских форматов ответов
Логирование ошибок валидации
Отладка проблем валидации
Расширенные техники
Валидация с зависимостями между полями
Кросс-полевая валидация
Валидация на уровне класса
Динамическая валидация
Валидация с контекстом
Использование метаданных
Миграция и совместимость
Миграция с других библиотек валидации
Совместимость версий class-validator
Работа с legacy-кодом
Постепенное внедрение валидации
Безопасность
Валидация как защита от инъекций
Предотвращение prototype pollution
Защита от массового присваивания
Санитизация входных данных
Валидация и XSS
Отладка и инструменты разработчика
Включение детального логирования
Использование debugger с валидацией
Инструменты для визуализации схем
Автогенерация документации по валидации
Интеграция с базами данных
Валидация перед сохранением в базу
Использование с TypeORM
Использование с Mongoose
Использование с Sequelize
Валидация на уровне ORM vs на уровне приложения
Генерация схем
Генерация JSON Schema из классов
Генерация OpenAPI спецификаций
Автоматическая документация API
Валидация на основе существующих схем
Лучшие практики
Когда валидировать данные
Где размещать валидационную логику
Баланс между строгостью и гибкостью
Читаемость валидационного кода
Поддерживаемость валидационных схем
Документирование правил валидации
Troubleshooting
Декораторы не работают
Ошибки конфигурации TypeScript
Проблемы с reflect-metadata
Валидация проходит, хотя не должна
Асинхронная валидация не выполняется
Проблемы с производительностью
Конфликты с другими библиотеками