Экземпляр валидатора создаётся через вызов конструктора
Ajv, принимающего объект конфигурации. Именно этот объект
определяет поведение движка валидации: уровень строгости, поддержку
форматов, правила обработки дополнительных полей, преобразования типов и
многое другое.
Базовая форма инициализации:
import Ajv from "ajv";
const ajv = new Ajv({
strict: true,
allErrors: true
});
Каждая опция влияет на внутренний механизм компиляции схем и выполнения проверки данных.
Опция управляет уровнем строгости соответствия JSON Schema спецификации.
const ajv = new Ajv({
strict: true
});
Поведение:
Режимы:
true — максимальная строгостьfalse — отключение строгих проверок"log" — вывод предупреждений без прерывания
выполненияИспользуется для выявления ошибок на этапе разработки схем.
Определяет стратегию обработки ошибок валидации.
const ajv = new Ajv({
allErrors: true
});
Поведение:
true — сбор всех ошибок за одну валидациюfalse — остановка на первой найденной ошибкеПри включённом режиме формируется полный список нарушений, что полезно для форм и пользовательского ввода.
Контроль корректности самих схем JSON Schema.
const ajv = new Ajv({
strictSchema: true
});
При включении:
Используется для повышения надёжности схем в больших проектах.
Управление строгой проверкой типов данных.
const ajv = new Ajv({
strictTypes: true
});
При активной опции:
Особенно полезно в API-валидации, где важна строгая типизация входных данных.
Автоматическое приведение типов входных данных.
const ajv = new Ajv({
coerceTypes: true
});
Поведение:
"123" может быть преобразована в число
123"true" может интерпретироваться как booleanВарианты:
true — приведение включено глобально"array" — приведение только для массивов схемfalse — отключеноОпция полезна при работе с HTTP-запросами, где данные часто приходят в виде строк.
Автоматическая подстановка значений по умолчанию из схемы.
const ajv = new Ajv({
useDefaults: true
});
Пример схемы:
const schema = {
type: "object",
properties: {
role: { type: "string", default: "user" }
}
};
Поведение:
defaultРежимы:
true — добавление всех default-значений"empty" — только для отсутствующих полей верхнего
уровняУдаление лишних полей, не описанных в схеме.
const ajv = new Ajv({
removeAdditional: true
});
Поведение:
propertiesВарианты:
true — удаление всегда"all" — рекурсивное удалениеfalse — отключеноКонтроль форматов данных (email, uri, date и др.).
const ajv = new Ajv({
validateFormats: true
});
Поведение:
Пример формата:
ajv.addFormat("postal-code", /^\d{6}$/);
Позволяет подключать кастомные форматы или переопределять стандартные.
const ajv = new Ajv({
formats: {
positiveInt: /^[1-9]\d*$/
}
});
Форматы могут быть:
Добавление пользовательских ключевых слов схемы.
const ajv = new Ajv({
keywords: [
{
keyword: "isPositive",
validate: (schema, data) => data > 0
}
]
});
Используется для расширения языка JSON Schema.
Определяет способ идентификации схем.
const ajv = new Ajv({
schemaId: "auto"
});
Варианты:
"auto" — автоматическое определение $id
или id"id" — использование старого формата
id"$id" — современный стандарт JSON SchemaНастройка разрешения URI для внешних схем.
const ajv = new Ajv({
uriResolver: customResolver
});
Используется при работе с $ref, указывающими на внешние
ресурсы.
Позволяет:
Контроль хранения использованных схем.
const ajv = new Ajv({
addUsedSchema: true
});
Поведение:
Управление текстами ошибок.
const ajv = new Ajv({
messages: true
});
При включении:
Полезно для локализации и кастомных систем логирования.
Опции генерации кода валидаторов.
const ajv = new Ajv({
code: {
es5: false,
optimize: 1
}
});
Параметры:
es5 — генерация совместимого ES5-кодаoptimize — уровень оптимизации компиляцииsource — включение исходного кода для отладкиУправление логированием внутренних событий.
const ajv = new Ajv({
logger: console
});
Возможности:
Расширение поведения для discriminator в сложных
схемах.
const ajv = new Ajv({
discriminateCustomRules: true
});
Используется при работе с полиморфными структурами данных, где выбор схемы зависит от значения конкретного поля.
Комбинирование опций формирует поведение валидатора:
const ajv = new Ajv({
strict: true,
allErrors: true,
coerceTypes: true,
useDefaults: true,
removeAdditional: "all",
messages: false
});
Разные комбинации позволяют адаптировать библиотеку под сценарии: