Валидация данных

Mind.js — это библиотека для построения умных интерфейсов и работы с данными в JavaScript, включающая мощные инструменты для валидации и очистки входной информации. Валидация данных необходима для предотвращения ошибок на ранних этапах обработки и обеспечения корректного функционирования приложений. В контексте Mind.js она реализуется через валидационные схемы, функции проверки и встроенные механизмы обработки ошибок.


Валидационные схемы

Валидационная схема в Mind.js — это объект, описывающий правила проверки для конкретных полей данных. Схема позволяет задавать тип данных, обязательность полей, маски для строк и диапазоны значений для чисел.

Пример структуры схемы:

const schema = {
    name: {
        type: 'string',
        required: true,
        minLength: 2,
        maxLength: 50
    },
    age: {
        type: 'number',
        required: true,
        min: 0,
        max: 120
    },
    email: {
        type: 'string',
        required: false,
        pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
    }
};

Ключевые моменты схем:

  • type — определяет ожидаемый тип данных (string, number, boolean, array, object).
  • required — указывает, должно ли поле присутствовать в данных.
  • minLength и maxLength — применяются к строкам.
  • min и max — применяются к числовым значениям.
  • pattern — регулярное выражение для проверки формата строки.

Основные методы валидации

Mind.js предоставляет два ключевых метода: validate и sanitize.

Метод validate проверяет соответствие данных схеме и возвращает объект с результатами проверки.

const result = Mind.validate(data, schema);
if (result.valid) {
    console.log('Данные прошли проверку');
} else {
    console.log('Ошибки валидации:', result.errors);
}

Структура результата валидации:

  • valid — логическое значение: true, если данные корректны, false при ошибках.
  • errors — объект с описанием ошибок по каждому полю.

Метод sanitize позволяет очистить данные согласно правилам схемы:

const cleanedData = Mind.sanitize(data, schema);
  • Удаляет лишние поля.
  • Приводит типы данных к ожидаемым.
  • Форматирует строки и числа в соответствии с заданными правилами.

Пользовательские функции проверки

Mind.js поддерживает возможность добавления кастомных валидаторов для нестандартных требований. В пользовательской функции можно реализовать любую логику проверки:

const schema = {
    username: {
        type: 'string',
        required: true,
        validate: (value) => value.startsWith('user_') || 'Имя пользователя должно начинаться с "user_"'
    }
};

const result = Mind.validate({ username: 'admin_01' }, schema);

Если функция возвращает строку, это считается сообщением об ошибке. Если возвращает true — проверка пройдена успешно.


Валидация сложных объектов

Для объектов и массивов Mind.js позволяет строить вложенные схемы. Это особенно полезно при работе с формами или JSON-данными:

const schema = {
    user: {
        type: 'object',
        required: true,
        schema: {
            name: { type: 'string', required: true },
            age: { type: 'number', required: true }
        }
    },
    tags: {
        type: 'array',
        required: false,
        items: { type: 'string', minLength: 2 }
    }
};
  • schema для объектов задаёт правила для полей объекта.
  • items для массивов описывает правила для каждого элемента.

Асинхронная валидация

Mind.js поддерживает асинхронные проверки, что полезно при обращении к базе данных или внешнему API:

const schema = {
    email: {
        type: 'string',
        required: true,
        asyncValidate: async (value) => {
            const exists = await checkEmailExists(value);
            return !exists || 'Email уже зарегистрирован';
        }
    }
};

const result = await Mind.validate(data, schema);

Асинхронные валидаторы возвращают промис, который резолвится либо true, либо сообщением об ошибке.


Интеграция с формами и UI

Mind.js можно напрямую интегрировать с фронтенд-формами. Валидация происходит на лету при вводе данных, а ошибки можно сразу отображать пользователю:

const inputHandler = (event) => {
    const fieldData = { email: event.target.value };
    const result = Mind.validate(fieldData, schema);
    showError(result.errors.email);
};

Это повышает надёжность интерфейса и снижает риск некорректных данных на сервере.


Настройка сообщений об ошибках

Mind.js позволяет задавать кастомные тексты ошибок для каждого правила:

const schema = {
    password: {
        type: 'string',
        required: true,
        minLength: 8,
        messages: {
            required: 'Пароль обязателен',
            minLength: 'Пароль должен быть не менее 8 символов'
        }
    }
};
  • Сообщения привязываются к конкретному правилу.
  • Можно использовать функции для динамических сообщений на основе значения поля.

Логирование и отладка

Для сложных приложений Mind.js предоставляет встроенные инструменты логирования валидации:

  • Mind.debug = true — выводит все этапы проверки данных в консоль.
  • Возможность просматривать промежуточные результаты sanitize и validate для каждого поля.

Это позволяет быстро находить причины ошибок и корректно настраивать схемы.