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í:

instagram viewer
  • 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.