[JavaScript Applications] Как да предпазим базата от невалидни данни?
Днес решавах изпита Products от предното ниво. В процеса на тестване установих, че нищо не пречи да пратя заявка, в която подавам невалидни данни - например празно име, или NaN вместо цена.
Заобиколих проблема с проверки в кода, при това ако не се лъжа във вюто, където подозирам, че не им е мястото. Например, ако паролата и повторената парола не съвпадат просто показвам нотификация и не викам контролера. Обаче с една проста заявка през пощальона и проверките увисват.
Направих тая глупост колкото да тръгне що-годе коректно (бих постъпил така и на изпита). Все пак бих искал да знам как е правилно да се подходи в случая. Проверките в кода къде би трябвало да се случват? Как да направя проверки и на бекенда? Може би с някакъв cloud code?
Ето и самия код ако на някого му е интересно. Следвах схемата, която Богомил показа на подготовката.
Едит: И бонус въпрос. Има условие, в което се иска да се филтрират продуктите. Направих всичко посредством заявките, освен търсенето по ключова дума. Не можах да намеря как да го направя в документацията, затова просто филтрирах резултатите преди да ги визуализирам. Предполагам има начин да кажа какво точно искам да изтегля от базата. Някой ако го знае ще съм благодарен ако го сподели :)
Предотвратяването на заявка с обикновен if вече ми изглежда доста по-смислено :) Не знам обаче дали да го правя това във вюто или в контролера, или пък в модела. Не съм толкова навътре с концепцията на MVC, за да преценя.
Има логика възможно най-много неща да се изнесат на сървъра. Вероятно това е и най-правилният начин да се филтрират данните по ключова дума, вместо да тегля всичко и после да филтрирам в скриптовете. Щом и ти не си намерил как може да стане през заявката подозирам, че просто не може.
Слагам отметка на методите за клауда, засега няма да ги разучавам, че изпитът наближава, а реално не се изисква от нас да правим такива валидации.
Все пак си мисля, че това е важно и може би трябва да се покаже в следващите курсове; доста колеги бяха правили подобни неща и на екипните проекти. Смятам, че е неизменна част от това да се научим да правим нещата по-цялостно и правилно, а не да напишем едно скалъпено MVC дето всеки с малко знания за rest ще го счупи за 10 секунди...
Strong cohesion...
Контролера отговаря потребителските действия, взема данните от модела и ги праща на view-то. Той контролира поведението на приложението.
View-то е html-а, който потребителя вижда.
Модела е нещото, което се занимава с данните. Той ги обработва, записва ги в сървъра, извлича ги от там, филтрира ги, проверява ги и така нататък...
Ето ти и примерен код за cloud простотиите. :)
Доста елементарно изглежда този код, още повече се убеждавам, че това трябва да е част от програмата на курса.
В този смисъл да разбирам, че модела би трябвало да прави валидациите? Има логика, както например един клас е отговорен да си поддържа състоянието валидно.