Zabezpečte své aplikace ověřováním dat na úrovni požadavku pomocí validační knihovny Joi.
Přijetí netestovaných a neověřených dat do webové aplikace může způsobit bezpečnostní chyby a z neplatných dat mohou vzniknout nepředvídatelné problémy.
ORM Node.js, jako je Sequelize a TypeORM, vám umožňují nastavit ověřovací pravidla hned na úrovni aplikace. Během vývoje API pocházejí data z požadavků HTTP na konkrétní koncové body. To se děje na úrovni požadavku; výchozí ověření nabízené ORM se na ně tedy nevztahuje.
Joi je popis schématu a validátor dat pro JavaScript. Zde se dozvíte, jak používat validační knihovnu Joi k ověřování dat na úrovni požadavku.
Nastavení demo projektu
Ukázat jak Joi ověřuje data, vytvoříte jednoduchou ukázkovou aplikaci, která napodobuje skutečnou aplikaci.
Nejprve vytvořte složku projektu a přesuňte se do ní spuštěním následujícího příkazu:
mkdir demoapp && cd demoapp
Dále inicializujte npm v adresáři projektu spuštěním:
npm init -y
Dále budete muset nainstalovat některé závislosti. Závislosti požadované pro tento výukový program zahrnují následující:
- Vyjádřit: Express je framework Node.js který poskytuje robustní sadu funkcí pro webové a mobilní aplikace. Express usnadňuje vytváření backendových aplikací pomocí Node.js.
- Joi: Joi je knihovna pro ověřování dat pro Node.js.
Nainstalujte závislosti pomocí správce balíčků uzlů spuštěním příkazu níže:
npm install express joi
Dále vytvořte index.js soubor ve vašem kořenovém adresáři a přidejte do něj následující blok kódu:
konst vyjádřit = vyžadovat("vyjádřit");
konst router = vyžadovat("./routes");
konst přístav = 3000;konst app = express();
app.use (express.json());
app.use (express.urlencoded({ prodloužený: skutečný }));
app.use (router);
app.listen (port, () => {
řídicí panel.log("aplikace naslouchá na portu 3000!");
});
Výše uvedený blok kódu nastavuje jednoduchý expresní server. Konfiguruje middleware tak, aby analyzoval data příchozích požadavků a zpracovával příchozí požadavky, a spustí server, aby naslouchal příchozím požadavkům na portu 3000.
Směrování a zpracování požadavků
Pro jednoduchost vytvoříte middleware pro zpracování požadavků, který vrátí stavový kód spolu s tělem požadavku jako odpověď na každý požadavek, který se pokouší odeslat data do vaší aplikace.
Vytvořit handler.js soubor v kořenovém adresáři vašeho projektu a přidejte níže uvedený blok kódu:
konst demoHandler = (požadavek, res, další) => {
znovu.odeslat({
kód: 201,
údaje: req.body,
});
další();
};
modul.exports = demoHandler;
Dále vytvořte a router.js soubor v kořenovém adresáři vašeho projektu a přidejte do svého souboru níže uvedený blok kódu:
konst vyjádřit = vyžadovat("vyjádřit");
konst demoHandler = vyžadovat("./psovod");
konst router = expres. Router();router.post("/Přihlásit se", demoHandler);
modul.exports = router;
Vytvoření schématu Joi
Schéma Joi představuje očekávanou strukturu a pravidla ověřování konkrétního datového objektu.
Chcete-li vytvořit schéma Joi, můžete použít Joi.object() způsob a řetěz různých ověřovacích pravidel vystavených společností Joi k definování struktury a požadavků na ověřování vašich dat.
Například:
konst exampleSchema = Joi.object({
jméno: Joi.string().min(3).Požadované(),
});
Výše uvedený příklad popisuje jednoduché schéma Joi s a název vlastnictví. The název majetek má hodnotu Joi.string().min (3).required(). To znamená, že název Hodnota by měla být řetězec s minimální délkou 3 znaků a je povinný.
Pomocí Joi můžete řetězit různé metody a přidat další ověřovací omezení do každého pole definovaného ve vašem schématu.
Zde je příklad s více poli a omezeními ověření:
konst userSchema = Joi.object({
e-mail: Joi.string().email().required(),heslo: Joi.string().min(6).Požadované(),
věk: Joi.number().min(18).volitelný(),
zaměstnaní: Joi.boolean().nepovinné(),
telefon: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.Požadované(),adresa: Joi.object({
ulice: Joi.string().min(3).Požadované(),
město: 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(),
}).options({ přerušit Brzy: Nepravdivé });
The userSchema definuje následující omezení pro každou vlastnost:
- e-mailem: Musí to být platný e-mailový řetězec.
- Heslo: Musí to být řetězec s minimálně 6 znaky.
- stáří: Nepovinné číslo s minimální hodnotou 18.
- zaměstnaný: Volitelný boolean.
- telefon: Požadovaný řetězec, který odpovídá zadanému výraz regulárního výrazu (/^\d{3}-\d{3}-\d{4}$/).
-
adresa: Objekt představující adresu uživatele s následujícími dílčími vlastnostmi.
- ulice: Požadovaný řetězec s minimální délkou 3 znaků.
- město: Požadovaný řetězec s minimální délkou 3 znaků.
- Stát: Požadovaný řetězec s minimální délkou 3 znaků.
- zip: Požadované číslo s minimální hodnotou 3.
- koníčky: Požadované pole řetězců.
Kromě omezení, userSchema nastavuje přerušit Brzy možnost Nepravdivé. Ve výchozím nastavení Joi zastaví provádění programu, jakmile narazí na první chybu, a vypíše chybu do konzole. Nastavení této možnosti však na Nepravdivé zajišťuje, že Joi zkontroluje celé schéma a vytiskne všechny zjištěné chyby do konzole.
Ověřování dat s Joi
Vytvořit validation.js soubor a přidejte userSchema kód k tomu.
Jako tak:
//validation.js
konst Joi = vyžadovat("joi");konst userSchema = Joi.object({
//...
}).options({ přerušit Brzy: Nepravdivé });
modul.exports = userSchema;
Poté vytvořte middleware, který zachytí datové části požadavků a ověří je podle poskytnutého schématu přidáním následujícího kódu pod userSchema kód.
konst validationMiddleware = (schéma) => {
vrátit se(požadavek, res, další) => {
konst { chyba } = schema.validate (req.body);-li (chyba) {
// Zpracování chyby ověření
řídicí panel.log (chybová.zpráva);
res.status(400.json({ chyby: detaily chyby });
} jiný {
// Data jsou platná, pokračujte dalším middlewarem
další();
}
};
};
Když je učiněn požadavek, middleware vyvolá ověřit metoda schéma k ověření těla žádosti. Pokud dojde k chybám ověření, middleware odešle a 400 špatný požadavek odpověď s chybovými zprávami extrahovanými z podrobností o chybě ověření.
Na druhou stranu, pokud ověření proběhne bez chyb, middleware zavolá další() funkce.
Nakonec exportujte validationMiddleware a userSchema.
modul.exports = {
userSchema,
validace Middleware,
};
Testování ověřovacích omezení
Import validationMiddleware a userSchema do vašeho router.js soubor a nastavte middleware takto:
konst { validationMiddleware, userSchema } = vyžadovat("./Validace");
router.post("/Přihlásit se", validationMiddleware (userSchema), demoHandler);
Spusťte aplikaci spuštěním příkazu níže:
uzelindex.js
Poté proveďte požadavek HTTP POST na localhost: 3000/registrace pomocí níže uvedených testovacích dat. Můžete toho dosáhnout pomocí cURL nebo jakéhokoli jiného klienta API.
{
"e-mailem": "uživatel@příklad", // Neplatný formát e-mailu
"Heslo": "složit", // Délka hesla menší než 6 znaků
"stáří": 15, // Věk pod 18 let
"zaměstnaný": skutečný,
"koníčky": ["čtení", "běh"],
"telefon": "123-456-789", // Neplatný formát telefonního čísla
"adresa": {
"ulice": "123",
"město": "Ukázkové město",
"Stát": "Příkladový stát",
"zip": 12345
}
}
Tento požadavek by selhal a vrátil by chybový objekt, protože datová část obsahuje mnoho neplatných polí, jako je e-mail, heslo, věk a telefon. Pomocí poskytnutého chybového objektu můžete zvládnout chyby vhodně.
Zjednodušení ověřování dat pomocí Joi
Zde jste probrali většinu základů ověřování dat pomocí Joi. Pokročilejší techniky a omezení však můžete pokrýt v dokumentaci Joi.
Joi zjednodušuje úlohu ověřování dat v JavaScriptu a poskytuje intuitivní řešení, které výrazně zlepšuje spolehlivost a integritu dat uložených ve vaší aplikaci.