js-validator-livr
js-validator-livr copied to clipboard
Async interface for validation rules
Не увидел в документации ничего про асинхронные правила. Без этого может быть тяжко на клиенте: например, валидация города / улицы, надо скачивать список с сервака, а интерфейс валидатора синхронный.
Другой пример: мне надо проверку, что введённый url публично доступен.
Да, сейчас не поддерживается асинхронные правила. Есть в планах добавить. Думаю, что API будет вроде этого https://github.com/koorchik/js-validator-livr/blob/async-rules/t/06-async_custom_rules.js
Но с этим подходом есть проблема, не ясно, как остановить выполнение валидации на первом ошибочном правиле. Например, когда у нас запросы к базе данных, и если у нас есть хоть одна ошибка - нет смысла грузить базу дополнительными запросами. В синхронном коде (PHP, Perl) реализации это решается просто - выбрасывается исключение.
Подскажите, пожалуйста, как обстоят дела с этим issue? Рассматриваю возможность применения LIVR в проекте, но уже заранее знаю, что асинхронные валидации будут нужны.
Кстати, если вы все ещё в стадии исследования - вот тут приводится пример cancellation в библиотеке bluebird: https://stackoverflow.com/a/35380826/2799055
Пока это еще открытый вопрос. Сложность в том, что это нужно добавить в ядро движка и нельзя реализовать просто правилами. Подскажите для какой задачи она планируются применяться, возможно будут идеи как это сделать в рамках текущей реализации.
В своём боевом проекте применил такой workaround: "долгие" правила отсутствуют на клиенте. Если в наборе правил для формы присутствует одно из таких правил, то все правила и все значения формы отправляются ajax'ом на сервер, где они проходят уже через PHP-шный LIVR, результат отображается на клиенте.
Хотя это, конечно, далеко не идеальное решение. На изменение значения инпута такую валидацию не повешаешь.
Пример асинхронной проверки, которая возникае достаточно регулярно: проверка доступности (не-занятости) e-mail на форме регистрации нового пользователя.
はい、いい考え
@koorchik Вітаю! АП темі) Віктор, підкажіть чи планується реалізація? Не хочеться на формі ускладнювати логіку, а обійтися лише livr
Накидував API, але в результаті не виходить його зробити сумісним. Скоріше буде окремий виклик для асинхронної валідації й підготовки правил, або навіть окремий класс. Також поки не знаю чи буде паралельно виконуватися валідація для різних полів. Подумаю ще над цим найближчим часом й спробую реалізувати
Вся робота по async валідації в гілці async-validation. Багато нюансів. Думаю, що на вихідних допишу. Але API валідатора нажаль буде несумісним з синхронними правилами. Можливо залишу обидві реалізації, бо не всі зможуть легко змігрувати код на асинхронні виклики
Done! Just published v2.5 to NPM
Дяка за допомогу, будемо пробувати!!!