Всем привет. Использую mongoose. Подскажите, как проверить тип входных данных из

роута по отдельному полю из схемы?
Типа User.schema.name.validate(req.body.name)

8 ответов

10 просмотров

ты мне кажется мешаешь слои, валидация это либо транспортный слой, либо же доменный, в твоем случае это транспортный

Vlad-N Автор вопроса
idk
ты мне кажется мешаешь слои, валидация это либо тр...

Прошу прощения, не понимаю на какую мысль наталкиваеш.

Vlad N
Прошу прощения, не понимаю на какую мысль наталкив...

он имеет ввиду - у тебя код программный должен валидировать данные формирующие тело запроса к СУБД, а СУБД должна заниматься только работой с ГОТОВЫМИ телами запросов

Vlad-N Автор вопроса
Alexandrr
он имеет ввиду - у тебя код программный должен вал...

Если я правильно понял, то у меня так и происходит. Я в роуте валидирую входные данные if(typeof req.body.name === 'string') Но я хочу проверять тип спользуя схему, чтоб не дублировать код. Грубо говоря если у меня поменяется тип проперти 'name' с String на Number то придется переписывать код на if(Number.isNaN(Number(req.body.name)) А если использовать на подобе вот этого User.schema.name.validate(req.body.name), - код во многих местах не нужно править.

Vlad N
Если я правильно понял, то у меня так и происходит...

"хочу проверять тип спользуя схему" - не понимаю, что это значит в питоне (на котором я пишу) сравнения типов объектов через if - недопустимо. для этого есть специальная функция, которая возвращает булево: "isinstance(object, type)" ну и тело условия идёт далее, смотря какой тип данных ты получаешь на входе. (может практика не правильная, пните пендалем меня, если кто знает лучше): "obj1 = 0 if isinstance(obj1, int): ... # тут тело условия и нормализация данных если надо, а потом # запрос к СУБД elif isinstance(obj1, dict): ... # тут тело условия и нормализация данных если надо, а потом # запрос к СУБД elif isinstance(obj1, float): ... # тут тело условия и нормализация данных если надо, а потом # запрос к СУБД "

Vlad N
Если я правильно понял, то у меня так и происходит...

а ты подумай, name может быть строкой? Ты так каплинг слоев создаешь. Что лучше, каплинг или же поправить в 2х местах?

Vlad-N Автор вопроса
idk
а ты подумай, name может быть строкой? Ты так капл...

С полем name ппостой пример. Если взять что-то сложнее. Допустим некое поле имело тип масив, а стало обектом. Либо поле name будет иметь обект то нужно будет отдельно проверять наличие в нем полей и их валидность. Явная связаность будет луше не явной. Для postgreql использовал самописную библиотеку. Там после создания схемы мог сконструировать отдельное поле User.schema.name.constructor(name). Если конструируя получил ошибку значит данные не валидны. Вот ищу как используя одну схему можно проверить валидность всей сущносити new User(...).validate() либо отдельного поля

Vlad N
С полем name ппостой пример. Если взять что-то сло...

Эта задача не относится к БД и выполняется как правило стандартными методами веб фреймворков, которые у вас испрльзуются

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
1. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта