Валидация данных является критически важным элементом современных веб-приложений. В библиотеке Slim.js обеспечивается возможность как клиентской, так и серверной проверки данных, что повышает надежность и безопасность приложения.
Клиентская валидация выполняется в браузере перед отправкой данных на сервер. Она снижает нагрузку на сервер, ускоряет отклик интерфейса и предоставляет пользователю мгновенную обратную связь.
Серверная валидация проводится независимо от клиентской проверки. Она гарантирует корректность и целостность данных, предотвращает внесение некорректной или опасной информации в базу данных.
В Slim.js клиентская валидация реализуется через встроенные директивы и методы компонента, а серверная — через API и контроллеры, которые обрабатывают данные перед сохранением.
Slim.js позволяет выполнять валидацию на уровне компонентов с использованием следующих инструментов:
Директивы slim-model и
slim-change Они позволяют связывать данные формы с
моделью компонента и реагировать на изменения в реальном времени.
<input type="text" slim-model="user.name" slim-change="validateName">
Метод validateName проверяет значение поля на
соответствие правилам:
validateName(event) {
const value = event.target.value;
this.errors.name = value.length < 3 ? 'Имя слишком короткое' : '';
}Использование регулярных выражений и функций проверки Slim.js поддерживает кастомные проверки через функции, привязанные к событиям:
validateEmail(event) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
this.errors.email = !emailRegex.test(event.target.value) ? 'Неверный формат email' : '';
}Отображение ошибок в интерфейсе Ошибки связываются с моделью и автоматически обновляют DOM:
<span slim-show="errors.name">{{errors.name}}</span>
<span slim-show="errors.email">{{errors.email}}</span>Ключевой принцип клиентской валидации в Slim.js — реактивность. Любые изменения модели автоматически отражаются в интерфейсе, что упрощает контроль за состоянием формы.
Даже при полной клиентской проверке серверная валидация обязательна, так как клиентские данные могут быть изменены злоумышленником.
В Slim.js серверная проверка строится следующим образом:
Приём данных через API Компонент отправляет
данные методом fetch или через slim-ajax:
submitForm() {
fetch('/api/users', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(this.user)
})
.then(res => res.json())
.then(data => this.handleResponse(data));
}Обработка данных на сервере Сервер проверяет каждый параметр по установленным правилам:
Пример на Node.js с использованием Express:
app.post('/api/users', (req, res) => {
const { name, email } = req.body;
let errors = {};
if (!name || name.length < 3) errors.name = 'Имя слишком короткое';
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) errors.email = 'Неверный формат email';
if (Object.keys(errors).length) return res.status(400).json({ errors });
// Сохранение данных в базу
res.status(200).json({ message: 'Пользователь создан' });
});Возврат ошибок на клиент Slim.js легко интегрируется с серверными ответами. Ошибки отображаются в компоненте без перезагрузки страницы:
handleResponse(data) {
if (data.errors) {
this.errors = data.errors;
} else {
this.errors = {};
this.user = {};
}
}Оптимальная практика заключается в сочетании клиентской и серверной проверки:
Использование реактивных свойств Slim.js упрощает синхронизацию ошибок и состояния формы. Для сложных форм можно создавать отдельные методы валидации, объединяя их для каждого поля и целой модели.
errors для всех полей позволяет
централизованно управлять ошибками.Клиентская и серверная валидация в Slim.js обеспечивает безопасность, удобство и масштабируемость. Реактивная модель и интеграция с событиями формы позволяют поддерживать интерфейс актуальным, а серверная логика гарантирует целостность данных.