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

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

8 ответов

3 просмотра

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

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 ппостой пример. Если взять что-то сло...

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

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

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

Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
с помощью чего можно бота добавить как админа в чат? (условно в боте есть кнопка, нажатие на которую приводит тебя к выбору чата и выдаче прав боту)
ηє νєямσяє
5
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Добрый день, подскажите как правильно сделать filter в backend-e. Есть модель (товар) у который связь belongsToMany (компания), компаний > 4k, поэтому выборку типа ->all(); н...
Max Dubovsky
7
Всем привет, есть таблица компонентов (например материнка, процессор, видеокарта и тд) components и нужно еще реализовать механизм "совместимости" (те какой-то словарь, мол од...
Vladimir
2
А как заставить поиск искать? Есть такая формочка <select class="form-control custom-select" name="brand_id" data-handler="onGetBrands"></select>
Денис Александрович
5
А цены чем оправданы?
Lencore
7
Hello, I want to ask. I trained EfficientNet V2 Small and achieved 98% accuracy and F1 score on test data. I did the same with a simple CNN and achieved 97% accuracy and F1 sc...
~
2
Карта сайта