роута по отдельному полю из схемы?
Типа User.schema.name.validate(req.body.name)
ты мне кажется мешаешь слои, валидация это либо транспортный слой, либо же доменный, в твоем случае это транспортный
Прошу прощения, не понимаю на какую мысль наталкиваеш.
он имеет ввиду - у тебя код программный должен валидировать данные формирующие тело запроса к СУБД, а СУБД должна заниматься только работой с ГОТОВЫМИ телами запросов
Если я правильно понял, то у меня так и происходит. Я в роуте валидирую входные данные if(typeof req.body.name === 'string') Но я хочу проверять тип спользуя схему, чтоб не дублировать код. Грубо говоря если у меня поменяется тип проперти 'name' с String на Number то придется переписывать код на if(Number.isNaN(Number(req.body.name)) А если использовать на подобе вот этого User.schema.name.validate(req.body.name), - код во многих местах не нужно править.
"хочу проверять тип спользуя схему" - не понимаю, что это значит в питоне (на котором я пишу) сравнения типов объектов через if - недопустимо. для этого есть специальная функция, которая возвращает булево: "isinstance(object, type)" ну и тело условия идёт далее, смотря какой тип данных ты получаешь на входе. (может практика не правильная, пните пендалем меня, если кто знает лучше): "obj1 = 0 if isinstance(obj1, int): ... # тут тело условия и нормализация данных если надо, а потом # запрос к СУБД elif isinstance(obj1, dict): ... # тут тело условия и нормализация данных если надо, а потом # запрос к СУБД elif isinstance(obj1, float): ... # тут тело условия и нормализация данных если надо, а потом # запрос к СУБД "
а ты подумай, name может быть строкой? Ты так каплинг слоев создаешь. Что лучше, каплинг или же поправить в 2х местах?
С полем name ппостой пример. Если взять что-то сложнее. Допустим некое поле имело тип масив, а стало обектом. Либо поле name будет иметь обект то нужно будет отдельно проверять наличие в нем полей и их валидность. Явная связаность будет луше не явной. Для postgreql использовал самописную библиотеку. Там после создания схемы мог сконструировать отдельное поле User.schema.name.constructor(name). Если конструируя получил ошибку значит данные не валидны. Вот ищу как используя одну схему можно проверить валидность всей сущносити new User(...).validate() либо отдельного поля
Эта задача не относится к БД и выполняется как правило стандартными методами веб фреймворков, которые у вас испрльзуются
Обсуждают сегодня