Zabezpečte svoje aplikácie overením údajov na úrovni požiadavky pomocou overovacej knižnice Joi.
Prijatie neotestovaných a neoverených údajov do webovej aplikácie môže spôsobiť bezpečnostné chyby a z neplatných údajov môžu vzniknúť nepredvídané problémy.
ORM Node.js, ako napríklad Sequelize a TypeORM, vám umožňujú nastaviť overovacie pravidlá hneď na úrovni aplikácie. Počas vývoja API pochádzajú údaje z požiadaviek HTTP na konkrétne koncové body. Toto sa deje na úrovni požiadavky; teda predvolená validácia, ktorú ponúkajú ORM, sa na ne nevzťahuje.
Joi je popis schémy a validátor údajov pre JavaScript. Tu sa dozviete, ako používať validačnú knižnicu Joi na overenie údajov na úrovni požiadavky.
Nastavenie demo projektu
Aby sme ukázali ako Joi overí údaje, vytvoríte jednoduchú demo aplikáciu, ktorá napodobňuje skutočnú aplikáciu.
Najprv vytvorte priečinok projektu a presuňte sa doň spustením nasledujúceho príkazu:
mkdir demoapp && cd demoapp
Ďalej inicializujte npm v adresári projektu spustením:
npm init -y
Ďalej budete musieť nainštalovať nejaké závislosti. Závislosti požadované pre tento tutoriál zahŕňajú nasledujúce:
- expresné: Express je rámec Node.js ktorý poskytuje robustnú sadu funkcií pre webové a mobilné aplikácie. Express uľahčuje vytváranie backendových aplikácií pomocou Node.js.
- Joi: Joi je knižnica na overenie údajov pre Node.js.
Nainštalujte závislosti s správca balíkov uzlov spustením príkazu nižšie:
npm install express joi
Ďalej vytvorte index.js súbor vo vašom koreňovom adresári a pridajte doň nasledujúci blok kódu:
konšt vyjadriť = vyžadovať("expresné");
konšt router = vyžadovať("./routes");
konšt prístav = 3000;konšt app = express();
app.use (express.json());
app.use (express.urlencoded({ predĺžený: pravda }));
app.use (smerovač);
app.listen (port, () => {
konzoly.log("Aplikácia počúva na porte 3000!");
});
Vyššie uvedený blok kódu nastavuje jednoduchý expresný server. Konfiguruje middleware na analýzu údajov prichádzajúcich požiadaviek a spracovávanie prichádzajúcich požiadaviek a spúšťa server, aby načúval prichádzajúce požiadavky na porte 3000.
Smerovanie a spracovanie požiadaviek
Pre jednoduchosť vytvoríte middleware obsluhy požiadaviek, ktorý vráti stavový kód spolu s telom požiadavky ako odpoveď na každú požiadavku, ktorá sa pokúša odoslať údaje do vašej aplikácie.
Vytvor handler.js súbor v koreňovom adresári vášho projektu a pridajte blok kódu nižšie:
konšt demoHandler = (req, res, next) => {
znovu.odoslať({
kód: 201,
údaje: req.body,
});
Ďalšie();
};
modul.exports = demoHandler;
Ďalej vytvorte a router.js súbor v koreňovom adresári vášho projektu a do súboru pridajte blok kódu nižšie:
konšt vyjadriť = vyžadovať("expresné");
konšt demoHandler = vyžadovať("./handler");
konšt router = expres. Router();router.post("/Prihlásiť Se", demoHandler);
modul.export = router;
Vytvorenie schémy Joi
Schéma Joi predstavuje očakávanú štruktúru a pravidlá overenia konkrétneho dátového objektu.
Na vytvorenie schémy Joi môžete použiť Joi.object() Metóda a reťazec rôznych overovacích pravidiel vystavených Joi na definovanie štruktúry a požiadaviek na overenie vašich údajov.
Napríklad:
konšt exampleSchema = Joi.object({
názov: Joi.string().min(3).požadovaný(),
});
Vyššie uvedený príklad popisuje jednoduchú schému Joi s a názov nehnuteľnosť. The názov majetok má hodnotu Joi.string().min (3).povinné(). To znamená, že názov hodnota by mala byť reťazec s minimálnou dĺžkou 3 znaky a je povinný.
Pomocou Joi môžete reťaziť rôzne metódy na pridanie ďalších overovacích obmedzení do každého poľa definovaného vo vašej schéme.
Tu je príklad s viacerými poľami a obmedzeniami overenia:
konšt userSchema = Joi.object({
email: Joi.string().email().required(),heslo: Joi.string().min(6).požadovaný(),
vek: Joi.number().min(18).voliteľné(),
zamestnaný: Joi.boolean().voliteľné(),
telefón: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.požadovaný(),adresa: Joi.object({
ulica: Joi.string().min(3).požadovaný(),
mesto: Joi.string().min(3).požadovaný(),
stav: Joi.string().min(3).požadovaný(),
zip: Joi.number().min(3).požadovaný(),
}).požadovaný(),koníčky: Joi.array().items (Joi.string()).required(),
}).možnosti({ prerušiťSkoro: falošný });
The userSchema definuje nasledujúce obmedzenia pre každú vlastnosť:
- email: Musí to byť platný reťazec e-mailu.
- heslo: Musí to byť reťazec s minimálne 6 znakmi.
- Vek: Voliteľné číslo s minimálnou hodnotou 18.
- zamestnaný: Voliteľný boolean.
- telefón: Požadovaný reťazec, ktorý sa zhoduje so zadaným regulárny výraz (/^\d{3}-\d{3}-\d{4}$/).
-
adresu: Objekt predstavujúci adresu používateľa s nasledujúcimi podvlastnosťami.
- ulica: Požadovaný reťazec s minimálnou dĺžkou 3 znaky.
- mesto: Požadovaný reťazec s minimálnou dĺžkou 3 znaky.
- štát: Požadovaný reťazec s minimálnou dĺžkou 3 znaky.
- PSČ: Požadované číslo s minimálnou hodnotou 3.
- koníčky: Požadované pole reťazcov.
Okrem obmedzení, userSchema nastavuje prerušiťSkoro možnosť falošný. V predvolenom nastavení Joi zastaví vykonávanie programu hneď, ako narazí na prvú chybu a vypíše chybu do konzoly. Nastavenie tejto možnosti však na falošný zaisťuje, že Joi skontroluje celú schému a vytlačí všetky zistené chyby do konzoly.
Overenie údajov s Joi
Vytvor validation.js súbor a pridajte userSchema kód k nemu.
Ako:
//validation.js
konšt Joi = vyžadovať("joi");konšt userSchema = Joi.object({
//...
}).možnosti({ prerušiťSkoro: falošný });
modul.exports = userSchema;
Potom vytvorte middleware, ktorý zachytí dátové zaťaženie požiadaviek a overí ich oproti poskytnutej schéme pridaním nasledujúceho kódu pod userSchema kód.
konšt validationMiddleware = (schému) => {
vrátiť(req, res, next) => {
konšt { chyba } = schema.validate (req.body);ak (chyba) {
// Spracovanie chyby overenia
konzoly.log (chybová. správa);
res.status(400.json({ chyby: detaily chyby });
} inak {
// Údaje sú platné, prejdite na ďalší middleware
Ďalšie();
}
};
};
Po zadaní požiadavky midlvér vyvolá potvrdiť metóda schému na overenie tela žiadosti. Ak sa vyskytnú nejaké chyby overenia, middleware odošle a 400 Zlá požiadavka odpoveď s chybovými správami extrahovanými z podrobností o chybe overenia.
Na druhej strane, ak overenie prebehne bez chýb, middleware zavolá Ďalšie() funkciu.
Nakoniec exportujte validationMiddleware a userSchema.
modul.exports = {
userSchema,
validationMiddleware,
};
Testovanie validačných obmedzení
Importovať validationMiddleware a userSchema do vášho router.js súbor a nastavte middleware takto:
konšt { validationMiddleware, userSchema } = vyžadovať("./validácia");
router.post("/Prihlásiť Se", validationMiddleware (userSchema), demoHandler);
Spustite aplikáciu spustením príkazu nižšie:
uzolindex.js
Potom vytvorte požiadavku HTTP POST na localhost: 3000/registrácia pomocou testovacích údajov uvedených nižšie. Môžete to dosiahnuť pomocou cURL alebo akéhokoľvek iného klienta API.
{
"e-mail": "používateľ@príklad", // Neplatný formát e-mailu
"heslo": "prejsť", // Dĺžka hesla menej ako 6 znakov
"Vek": 15, // Vek do 18 rokov
"zamestnaný": pravda,
"záľuby": ["čítanie", "beh"],
"telefón": "123-456-789", // Neplatný formát telefónneho čísla
"adresa": {
"ulica": "123",
"mesto": "Ukážkové mesto",
"štát": "Príkladový štát",
"PSČ": 12345
}
}
Táto požiadavka by zlyhala a vrátila by chybový objekt, pretože užitočné zaťaženie obsahuje veľa neplatných polí, ako napríklad e-mail, heslo, vek a telefón. Pomocou poskytnutého chybového objektu môžete zvládnuť chyby primerane.
Zjednodušenie overovania údajov s Joi
Tu ste prebrali väčšinu základov overovania údajov pomocou Joi. Pokročilejšie techniky a obmedzenia však môžete pokryť v dokumentácii Joi.
Joi zjednodušuje úlohu overovania údajov v JavaScripte a poskytuje intuitívne riešenie, ktoré výrazne zlepšuje spoľahlivosť a integritu údajov uložených vo vašej aplikácii.