Validator.js поддерживает механизм пользовательских сообщений, позволяющий полностью управлять текстами ошибок, формируемыми при проверке данных. Этот механизм используется для повышения читаемости ошибок, внедрения локализации, унификации ответов API и отделения бизнес-логики валидации от представления сообщений.
Система сообщений валидации строится вокруг идеи разделения правил и текстов ошибок. Каждое правило проверки может быть связано с одним или несколькими сообщениями, которые формируются при его нарушении.
Основные принципы:
В простейшем варианте каждое правило сопровождается кастомным текстом:
import validator from 'validator';
const result = validator.isLength('abc', {
min: 5
}, {
message: 'Строка должна содержать не менее 5 символов'
});
Здесь сообщение заменяет стандартный текст ошибки, который библиотека формирует автоматически.
При комбинированной валидации каждое правило может иметь собственное сообщение:
const rules = {
password: [
{
rule: (value) => value.length >= 8,
message: 'Пароль должен содержать минимум 8 символов'
},
{
rule: (value) => /[A-Z]/.test(value),
message: 'Пароль должен содержать хотя бы одну заглавную букву'
}
]
};
Такая структура позволяет точно локализовать причину ошибки.
Параметризация сообщений повышает их информативность. Значения подставляются из контекста проверки:
const minLength = 10;
const message = `Минимальная длина строки: ${minLength} символов`;
В более сложных сценариях используются шаблонные функции:
const messageBuilder = (min, max) =>
`Значение должно быть от ${min} до ${max}`;
Одним из ключевых сценариев является поддержка нескольких языков. Сообщения выносятся в отдельные словари:
const messages = {
ru: {
required: 'Поле обязательно для заполнения',
email: 'Некорректный формат электронной почты'
},
en: {
required: 'Field is required',
email: 'Invalid email format'
}
};
Выбор языка осуществляется на уровне конфигурации:
const locale = 'ru';
const message = messages[locale].required;
При масштабировании приложения сообщения выносятся в отдельный модуль:
export const errorMessages = {
username: {
required: 'Имя пользователя обязательно',
minLength: 'Имя пользователя слишком короткое'
},
email: {
required: 'Email обязателен',
invalid: 'Email имеет неверный формат'
}
};
Такой подход упрощает сопровождение и снижает дублирование текста.
Каждое правило может ссылаться на ключ сообщения, а не на сам текст:
const rules = {
email: {
validator: (value) => value.includes('@'),
messageKey: 'email.invalid'
}
};
При выполнении проверки происходит резолв ключа в конкретный текст.
Библиотека предоставляет базовые сообщения, которые можно заменить глобально:
validator.setMessages({
required: 'Это поле обязательно',
min: 'Значение меньше допустимого'
});
Такой подход применяется для унификации поведения во всём приложении.
Контекст ошибки может включать:
Пример генерации:
function buildMessage(field, rule, params) {
return `Ошибка в поле ${field}: правило ${rule} нарушено`;
}
При комплексной проверке одно поле может возвращать несколько сообщений:
const errors = [
'Поле обязательно',
'Минимальная длина 5 символов'
];
Такой формат используется для детального отображения состояния данных.
Сообщения могут содержать плейсхолдеры:
const template = 'Значение должно быть больше {min}';
function format(msg, params) {
return msg.replace('{min}', params.min);
}
Это упрощает поддержку универсальных шаблонов.
Результат валидации часто структурируется:
{
field: 'email',
errors: [
{
rule: 'format',
message: 'Некорректный email'
}
]
}
Такой формат облегчает обработку на стороне API.
При конфликте нескольких источников сообщений применяется приоритет:
Это позволяет гибко управлять уровнем переопределения.
Сообщения могут быть функциями:
const message = (value) =>
`Недопустимое значение: ${value}`;
Это даёт возможность динамической генерации текста в зависимости от входных данных.
В крупных системах применяется единый формат:
Это снижает неоднозначность интерпретации ошибок и упрощает поддержку кода.
Часто сообщения включаются в JSON-ответ:
{
"status": "error",
"errors": {
"email": ["Некорректный формат email"]
}
}
Такой формат используется для интеграции с фронтенд-валидацией.
Система сообщений допускает расширение через:
Это позволяет адаптировать механизм под любые архитектуры приложений.