В библиотеке class-validator поведение валидации
определяется не только декораторами, но и набором параметров, задающих
общую стратегию обработки данных. Эти параметры формируют единый слой
управления, который влияет на результат выполнения функций
validate и validateOrReject.
Глобальная настройка не хранится в едином конфигурационном объекте по умолчанию, однако библиотека предоставляет механизмы, позволяющие централизовать поведение через повторно используемые опции, контейнер зависимостей и обёртки над функциями валидации.
Основу конфигурации составляет интерфейс ValidatorOptions, определяющий поведение движка валидации.
whitelist Удаляет свойства объекта, которые не имеют соответствующих декораторов валидации.
true — лишние поля удаляются из объектаforbidNonWhitelisted Ужесточённый режим whitelist.
forbidUnknownValues Запрещает валидацию объектов без метаданных.
skipMissingProperties Игнорирует отсутствующие свойства.
skipNullProperties /
skipUndefinedProperties Пропускает проверку
null или undefined.
validationError Определяет состав объекта ошибки.
target: включение исходного объектаvalue: включение проверяемого значенияstopAtFirstError Прерывает валидацию после первой ошибки.
dismissDefaultMessages Отключает стандартные сообщения ошибок.
Отсутствие встроенного глобального конфигурационного объекта компенсируется созданием централизованного набора параметров.
import { validate } from "class-validator";
const validationOptions = {
whitelist: true,
forbidNonWhitelisted: true,
skipMissingProperties: false,
stopAtFirstError: false,
validationError: {
target: false,
value: false,
},
};
Такой объект применяется во всех вызовах validate,
обеспечивая единообразие поведения.
Для устранения дублирования создаётся слой абстракции:
import { validate as baseValidate } from "class-validator";
const defaultOptions = {
whitelist: true,
forbidNonWhitelisted: true,
skipMissingProperties: false,
};
export function validate(entity) {
return baseValidate(entity, defaultOptions);
}
Подобная структура формирует де-факто глобальную конфигурацию, применяемую ко всем сущностям.
Одним из ключевых глобальных механизмов является интеграция с DI-контейнером через useContainer.
import { useContainer } from "class-validator";
import { Container } from "some-di-container";
useContainer(Container);
Контейнер необходим для:
ValidatorConstraintБез настройки контейнера:
Поведение ошибок в class-validator формируется структурой ValidationError.
Каждая ошибка может содержать:
const options = {
validationError: {
target: false,
value: false,
},
};
Отключение этих полей снижает объём возвращаемых данных и упрощает сериализацию ошибок.
Комбинация параметров:
Характеристики:
Используется для PATCH-операций:
Поведение:
const options = {
stopAtFirstError: true,
};
Особенности:
В крупных приложениях формируется единый слой валидации, который применяется ко всем DTO.
const DOMAIN_VALIDATION_OPTIONS = {
whitelist: true,
forbidNonWhitelisted: true,
skipMissingProperties: false,
stopAtFirstError: false,
validationError: {
target: false,
value: false,
},
};
Использование такого объекта обеспечивает одинаковое поведение на уровне:
Кастомные валидаторы в class-validator часто зависят от глобальных механизмов.
import { ValidatorConstraint, ValidatorConstraintInterface } from "class-validator";
@ValidatorConstraint({ async: true })
class IsUniqueUser implements ValidatorConstraintInterface {
async validate(value) {
return value !== "admin";
}
}
При использовании DI:
useContainerclass-validator строится на основе метаданных, создаваемых
декораторами @IsString, @Length,
@ValidateNested и другими.
Глобальные параметры влияют на интерпретацию этих метаданных:
Метаданные выступают статической схемой, а глобальные настройки определяют стратегию её применения.
Используется единый модуль конфигурации:
Разделение на уровни:
Приоритет обычно строится так, что локальные параметры перекрывают глобальные.
const base = { whitelist: true };
const api = { forbidNonWhitelisted: true };
const merged = { ...base, ...api };
Такой подход позволяет строить сложные схемы поведения без изменения ядра приложения.
Глобальная настройка в class-validator фактически сводится к контролю следующих аспектов:
Эти параметры формируют устойчивую модель валидации, применяемую на уровне всей системы обработки данных.