Осигурајте своје апликације тако што ћете потврдити податке на нивоу захтева користећи Јои библиотеку валидације.
Прихватање непроверених и непотврђених података у веб апликацију може да изазове безбедносне пропусте, а непредвиђени проблеми могу настати због неважећих података.
Ноде.јс ОРМ-ови, као што су Секуелизе и ТипеОРМ, омогућавају вам да поставите правила валидације ван кутије на нивоу апликације. Током развоја АПИ-ја, подаци долазе из ХТТП захтева до одређених крајњих тачака. Ово се дешава на нивоу захтева; према томе, подразумевана валидација коју нуде ОРМ-ови не важи за њих.
Јои је опис шеме и валидатор података за ЈаваСцрипт. Овде ћете научити како да користите Јои библиотеку валидације за проверу података на нивоу захтева.
Постављање демо пројекта
Да покаже како Јои проверава податке, направићете једноставну демо апликацију која имитира стварну апликацију.
Прво направите фасциклу пројекта и преместите се у њу тако што ћете покренути следећу команду:
мкдир демоапп && цд демоапп
Затим иницијализујте нпм у директоријуму вашег пројекта тако што ћете покренути:
нпм инит -и
Затим ћете морати да инсталирате неке зависности. Зависности потребне за овај водич укључују следеће:
- изразити: Екпресс је оквир Ноде.јс који пружа робустан скуп функција за веб и мобилне апликације. Екпресс олакшава прављење позадинских апликација са Ноде.јс.
- Јои: Јои је библиотека за валидацију података за Ноде.јс.
Инсталирајте зависности са менаџер пакета чвора покретањем наредбе испод:
нпм инсталл екпресс јои
Затим креирајте ан индек.јс датотеку у вашем основном директоријуму и додајте му следећи блок кода:
конст екпресс = захтевају("изразити");
конст рутер = захтевају("./роутес");
конст порт = 3000;конст апп = екпресс();
апп.усе (екпресс.јсон());
апп.усе (екпресс.урленцодед({ продужени: истина }));
апп.усе (рутер);
апп.листен (порт, () => {
конзола.Пријава(„апликација слуша на порту 3000!“);
});
Блок кода изнад поставља једноставан Екпресс сервер. Он конфигурише међуверски софтвер за рашчлањивање података о долазним захтевима и руковање долазним захтевима и покреће сервер да слуша долазне захтеве на порту 3000.
Рутирање и руковање захтевима
Ради једноставности, креираћете средњи софтвер за руковање захтевима који враћа статусни код, заједно са телом захтева, као одговор на сваки захтев који покушава да пошаље податке вашој апликацији.
Створити хандлер.јс датотеку у основном директоријуму вашег пројекта и додајте блок кода испод:
конст демоХандлер = (рек, рес, следећи) => {
рес.сенд({
код: 201,
подаци: рек.боди,
});
следећи();
};
модул.екпортс = демоХандлер;
Затим креирајте а роутер.јс датотеку у основном директоријуму вашег пројекта и додајте блок кода испод у своју датотеку:
конст екпресс = захтевају("изразити");
конст демоХандлер = захтевају("./хандлер");
конст рутер = експрес. Роутер();роутер.пост("/пријави се", демоХандлер);
модул.екпортс = рутер;
Креирање Јои шеме
Јои шема представља очекивану структуру и правила валидације одређеног објекта података.
Да бисте креирали Јои шему, можете користити Јои.објецт() методом и ланцем различитих правила валидације која је изложио Јои да би дефинисао структуру и захтеве за валидацију ваших података.
На пример:
конст екамплеСцхема = Јои.објецт({
име: Јои.стринг().мин(3).потребан(),
});
Горњи пример описује једноставну Јои шему са а име имовина. Тхе име имовина има вредност од Јои.стринг().мин (3).рекуиред(). То значи да је име вредност треба да буде стринг, са минималном дужином од 3 знака и обавезна је.
Користећи Јои, можете повезати различите методе да бисте додали више ограничења валидације сваком пољу дефинисаном у вашој шеми.
Ево примера са више поља и ограничења валидације:
конст усерСцхема = Јои.објецт({
емаил: Јои.стринг().емаил().рекуиред(),лозинка: Јои.стринг().мин(6).потребан(),
старост: Јои.број().мин(18).опционо(),
запослено: Јои.боолеан().оптионал(),
телефон: Јои.стринг()
.регек(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.потребан(),адреса: Јои.објецт({
улица: Јои.стринг().мин(3).потребан(),
град: Јои.стринг().мин(3).потребан(),
стање: Јои.стринг().мин(3).потребан(),
зип: Јои.број().мин(3).потребан(),
}).потребан(),хобији: Јои.арраи().итемс (Јои.стринг()).рекуиред(),
}).Опције({ абортЕарли: лажно });
Тхе усерСцхема дефинише следећа ограничења за свако својство:
- емаил: Мора бити важећи низ е-поште.
- Лозинка: Мора бити стринг са најмање 6 знакова.
- старости: опциони број са минималном вредношћу од 18.
- запослен: Опциони логички.
- телефон: Неопходан стринг који одговара наведеном регек израз (/^\d{3}-\d{3}-\d{4}$/).
-
адреса: Објекат који представља адресу корисника са следећим подсвојствима.
- улица: Неопходан стринг са минималном дужином од 3 знака.
- град: Неопходан стринг са минималном дужином од 3 знака.
- држава: Неопходан стринг са минималном дужином од 3 знака.
- зип: Потребан број са минималном вредношћу 3.
- Хоби: Неопходан низ стрингова.
Поред ограничења, усерСцхема поставља абортЕарли опција да лажно. Подразумевано, Јои зауставља извршавање програма чим наиђе на прву грешку и штампа грешку на конзоли. Међутим, подешавање ове опције на лажно осигурава да Јои проверава целу шему и штампа све грешке на конзоли.
Провера података помоћу Јои
Створити валидатион.јс датотеку и додајте усерСцхема код за то.
Овако:
//validation.js
конст Јои = захтевају("јои");конст усерСцхема = Јои.објецт({
//...
}).Опције({ абортЕарли: лажно });
модул.екпортс = усерСцхема;
Затим креирајте међуверски софтвер који пресреће терете захтева и верификује их у односу на дату шему додавањем следећег кода испод усерСцхема код.
конст валидатионМиддлеваре = (шема) => {
повратак(рек, рес, следећи) => {
конст { грешка } = сцхема.валидате (рек.боди);ако (грешка) {
// Руковати грешком валидације
конзола.лог (еррор.мессаге);
рес.статус(400).јсон({ грешке: детаљи о грешци });
} друго {
// Подаци су валидни, пређите на следећи међуовер
следећи();
}
};
};
Када се постави захтев, средњи софтвер позива валидирати методом шема за валидацију тела захтева. Ако дође до било каквих грешака у валидацији, средњи софтвер шаље а 400 Лош захтев одговор са порукама о грешци извученим из детаља о грешци при валидацији.
С друге стране, ако валидација прође без грешака, међувера позива тхе следећи() функција.
Коначно, извезите валидатионМиддлеваре и усерСцхема.
модул.екпортс = {
корисничка шема,
валидатионМиддлеваре,
};
Тестирање ограничења валидације
Увоз валидатионМиддлеваре и усерСцхема у свој роутер.јс датотеку и подесите средњи софтвер на следећи начин:
конст { валидатионМиддлеваре, усерСцхема } = захтевају("./валидација");
роутер.пост("/пријави се", валидатионМиддлеваре (усерСцхема), демоХандлер);
Покрените своју апликацију тако што ћете покренути наредбу испод:
чвориндекс.јс
Затим направите ХТТП ПОСТ захтев за локални хост: 3000/пријава користећи доле наведене тестне податке. Ово можете постићи користећи цУРЛ или било који други АПИ клијент.
{
"е-пошта": „корисник@пример“, // Неважећи формат е-поште
"Лозинка": "проћи", // Дужина лозинке мања од 6 знакова
"старост": 15, // Старост испод 18 година
"запослен": истина,
"Хоби": ["читање", "трчање"],
"телефон": "123-456-789", // Неважећи формат броја телефона
"адреса": {
"улица": "123",
"град": „Град за пример“,
"држава": "Пример државе",
"зип": 12345
}
}
Овај захтев би био неуспешан и вратио објекат грешке јер корисни садржај садржи много неважећих поља, као што су е-пошта, лозинка, старост и телефон. Користећи наведени објекат грешке, можете обрадити грешке на одговарајући начин.
Поједностављивање валидације података помоћу Јои-а
Овде сте покрили већину основа валидације података користећи Јои. Међутим, можете покрити напредније технике и ограничења у Јои документацији.
Јои поједностављује задатак валидације података у ЈаваСцрипт-у, пружајући интуитивно решење које значајно побољшава поузданост и интегритет података ускладиштених у вашој апликацији.