У нас, например, есть сканер, который собирает разную информацию. Сегодня в этом поле может быть число, завтра там строка, послезавтра там уже массив строк и т.п. То есть заранее не известно, что мы получим. При этом нам нужно обязательно хранить эту информацию, не важно какой бы она была. Понимаю, что это чисто наша спецефическая проблема, но всё же — заранее схему описать нельзя. Можно лишь попытаться подогнать пришедшие данные под допустимые схемы и сохранить их БД для последующей обработки.
Кстати, вот наверно чего не хватает всем библиотекам — это конвертирующих функций, которые исполняются после успешной валидации. В Joi они примитивны, например там в число преобразовать или в строку. Не хватает чего-нить типа такого:
convert: function (value) {
return value.toString().split('\n');
}
1) Ну да, это только JS. У вас есть php и python это круто. Раньше, когда на этих языках писал, то испытывал те же проблемы что и вы — не было нормальной библиотеки для валидации. Теперь, видимо, есть, спасибо :)
2) Можно описать в виде структуры (json), потом скомпилировать структуру в схему Joi.
3) Есть опция, которая позволяет отобразить все ошибки, а не остановится только на первой.
4) Если вы имеете ввиду, что для валидации данных необходимо использовать свою функцию, то для этого есть Joi.func
5) Можно валидировать неограниченное количество вложенных объектов.
Как альтернативу, подпадающие под все ваши вводные правила, могу порекомендовать Joi. Из плюсов — правил валидации намного больше, ну и чуть больше возможностей, например не увидел у вас, возможно ли задавать дефолтные значения переменных, если во входящий данных пусто и можно ли у вас задавать условия ветвления, если например я хочу допустить, что в одной переменной может быть строка или массив строк и соответственно задать разные правила для каждого из случаев.
Вот на днях на всем известном сайте искал б/у прошку 15" с расчетом на замену hdd->ssd и оперативку до 16. Так вот в текущих реалиях, купить старую прошку + новый ssd и два модуля по 8GB по совокупной стоимости равняется цене б/у ретины 15".
Да, понятно, что эта дорога по факту получилась довольно сложной, этого никто и не отрицает. Но есть какое-то чувство не справедливости, когда читаешь новости о том, что где-то там поезда уже ездят со скоростью 590 км/ч, а у нас отменяют электрички.
Проблемы — отсутствие инфраструктуры и высокая стоимость создания колеи
Ради интереса погуглил и нашел, что JR Maglev стоит 136 млн. долл за 1 км. Так то не очень дорого, если сравнить с дорогой «Адлер — Красная поляна», которая обошлась почти в 200 млн. долл за 1 км… ;)
у третьего — забавный глюк с записью размера транзакции по значению на момент блокировки средств, а учёт по размеру на момент клиринга (при оплате в валюте, отличной от валюты счёта).
Такой же штукой страдает Авангард. Бывает оплачиваешь хостинг, на счете блокируется одна сумма, а потом, когда, например, курс подрастет, они проводят её по другой сумме и плюс добавляют комисию за «За осуществление трансграничной операции».
Как и автор, тоже пользуюсь ZenMoney — удобней их ничего не видел еще. Жаль будет, если они закроются.
А почему бы не хранить теги не в виде массива строка, а в ввиде массива объектов? Вот например так это описывается в модели Mongoose:
var postSchema = new Schema({
...
tags: [new Schema({
id: {type: Schema.Types.ObjectId, ref: 'Tags'},
name: String
})]
...
});
Тогда при вставке поста будет проверяться наличие тега в коллекции Tags и если он присутствует, то в id будет подтягиваться ObjectId из коллекции Tags и если нужно будет изменить имя тега, то в коллекции Tags должен быть хук, который после обновления поля name обновляет в других коллекциях это же поле.
А какой из этих сервисов позволяет совершать групповые видеозвонки с возможностью демонстрации экрана? Иногда быстрее продемонстрировать проблему и обсудить её быстро голосом, чем копипастить скриншоты и писать текст.
convert: function (value) {
return value.toString().split('\n');
}
2) Можно описать в виде структуры (json), потом скомпилировать структуру в схему Joi.
3) Есть опция, которая позволяет отобразить все ошибки, а не остановится только на первой.
4) Если вы имеете ввиду, что для валидации данных необходимо использовать свою функцию, то для этого есть Joi.func
5) Можно валидировать неограниченное количество вложенных объектов.
Ради интереса погуглил и нашел, что JR Maglev стоит 136 млн. долл за 1 км. Так то не очень дорого, если сравнить с дорогой «Адлер — Красная поляна», которая обошлась почти в 200 млн. долл за 1 км… ;)
Такой же штукой страдает Авангард. Бывает оплачиваешь хостинг, на счете блокируется одна сумма, а потом, когда, например, курс подрастет, они проводят её по другой сумме и плюс добавляют комисию за «За осуществление трансграничной операции».
Как и автор, тоже пользуюсь ZenMoney — удобней их ничего не видел еще. Жаль будет, если они закроются.
Тогда при вставке поста будет проверяться наличие тега в коллекции Tags и если он присутствует, то в id будет подтягиваться ObjectId из коллекции Tags и если нужно будет изменить имя тега, то в коллекции Tags должен быть хук, который после обновления поля name обновляет в других коллекциях это же поле.