javascript42
Главная
Все учебники
Блог
Учебник Joi
Введение
Что такое Joi и зачем он нужен
История создания и развитие библиотеки
Установка и настройка окружения
Первая схема валидации
Структура документации и как ей пользоваться
Основы работы с Joi
Создание простых схем
Методы валидации: validate, attempt, assert
Обработка результатов валидации
Объект ошибок ValidationError
Опции валидации
Контекст валидации
Типы данных
Строки: string()
Числа: number()
Булевы значения: boolean()
Даты: date()
Бинарные данные: binary()
Функции: function()
Массивы: array()
Объекты: object()
Альтернативы: alternatives()
Any и forbidden
Symbol
Валидация строк
Базовые ограничения длины
Регулярные выражения
Email, URI, hostname
GUID, IP-адреса
Чувствительность к регистру
Trim и нормализация
Кодировки и base64
Доменные имена и creditCard
Hex и dataUri
Пользовательские паттерны
Валидация чисел
Диапазоны значений: min, max, greater, less
Целые и дробные числа
Положительные и отрицательные
Кратность: multiple
Точность и precision
Порты и безопасные целые
Infinity и специальные значения
Преобразование типов
Валидация дат
Форматы дат
Минимальные и максимальные даты
ISO форматы
Timestamp в миллисекундах и секундах
Сравнение с текущей датой
Временные зоны
Валидация массивов
Длина массива
Уникальность элементов
Валидация элементов массива
Сортировка: ordered, items, sparse
Минимальное и максимальное количество элементов
Has и single
Вложенные массивы
Валидация объектов
Структура объекта
Обязательные и необязательные ключи
Паттерны ключей
Unknown, forbidden и strip
Keys и schema
And, or, xor для ключей
Зависимости между полями
Rename и переименование ключей
Assert для сложных условий
Вложенные объекты
Instance и конструкторы
Модификаторы и цепочки методов
Required и optional
Allow и valid
Invalid и disallow
Default значения
Failover
When и условная валидация
Strip и keep
Concat для композиции схем
Продвинутые техники валидации
Ref и ссылки на другие поля
Ancestors и siblings
Динамические значения через функции
Custom валидаторы
External асинхронная валидация
Сообщения об ошибках
Переопределение стандартных сообщений
Локализация ошибок
Прослушивание и модификация ошибок
Расширение Joi
Создание собственных типов
Extend API
Coerce и преобразования
Rules и правила валидации
Messages для кастомных типов
Упаковка расширений
Работа с alternatives
Условные схемы
Try и порядок проверки
Match для выбора схемы
Conditional на основе других полей
Сложные условия
Схемы для бизнес-логики
Валидация форм регистрации
Проверка платежных данных
Сложные многошаговые формы
Условная обязательность полей
Кросс-полевая валидация
Интеграция с фреймворками
Express middleware
Fastify schemas
Валидация запросов и ответов
Автоматическая документация API
Производительность и оптимизация
Компиляция схем
Кеширование
Абортирование при первой ошибке
Ленивая валидация
Профилирование схем
Benchmark лучших практик
Тестирование схем
Unit-тесты для валидаторов
Генерация тестовых данных
Coverage валидационных правил
Regression тесты
TypeScript и типизация
Извлечение типов из схем
Joi.extract и утилиты типов
Интеграция с типами TypeScript
Автодополнение и IDE support
Строгая типизация схем
Безопасность
Защита от injection
DoS через сложные схемы
Лимиты на размер данных
Санитизация входных данных
Prototype pollution
Миграция и обновление
Переход с версии на версию
Breaking changes
Deprecation warnings
Миграция со старых версий
Альтернативы Joi и сравнение
Отладка и troubleshooting
Debugging схем
Verbose режим
Детализация ошибок
Частые ошибки и решения
Паттерны проектирования
Переиспользование схем
Композиция и наследование
Схема как источник истины
Модульная организация валидаторов
Версионирование схем
Реальные сценарии применения
API валидация
Конфигурационные файлы
Обработка файлов
Webhooks
GraphQL inputs
CLI аргументы