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, либо сообщением об ошибке.
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 для каждого поля.Это позволяет быстро находить причины ошибок и корректно настраивать схемы.