Co je Zod?
Zod je první deklarační a validační knihovna schématu TypeScript, kterou vytvořil Colin McDonnell. Na rozdíl od Yup je Zod na prvním místě TypeScript, což znamená, že má mnoho funkcí pro vývojáře TypeScript.
Zod přichází s některými opravdu skvělými funkcemi, jako je:
- Funguje v Node.js a prohlížečích (včetně IE 11)
- Nulové závislosti
- Funguje také s JavaScriptem
Proč potřebujete ověřovat svá volání API?
Ověření vašich volání API vám pomůže získat správná data, která chcete, například chcete, aby vaši uživatelé měli silné heslo (např. alespoň 6 znaků), můžete použít něco jako Zod nebo Yup a zabránit uživatelům v zadávání krátkého hesla ( méně než 6 znaků). Provádění validace na serveru také dělá váš server mnohem bezpečnějším, protože nikdo nemůže otevřít vývojářské nástroje, projít váš kód a přijít na to, jak překonat vaši validaci.
Začněme kódovat
Nejprve vytvořte prázdný adresář a přejděte do něj:
mkdir schema-validation-with-zod-and-expressjs
cd schema-validation-with-zod-and-expressjs
Poté inicializujte projekt Node.js a přidejte potřebné závislosti:
npm init -y
npm install express zod
Dále přidejte následující skript do našeho package.json
soubor.
{
// ...
"scripts": {
"dev": "node index.js"
}
// ...
}
Nyní spustíme server Express.js.
Vytvořte soubor s názvem index.js
v kořenu projektu:
const express = require("express");
const app = express();
app.use(express.json());
app.listen(1337, () => console.log(`> Ready on http://localhost:${1337}`));
Poté spusťte server Express.js (Můžete k němu přistupovat na http://localhost:1337
).
npm run dev
Dále můžeme začít pracovat se Zodem,
Nejprve importujeme z
od zod
a přidejte jednoduché přihlašovací schéma.
const express = require("express");
const { z } = require("zod");
const app = express();
app.use(express.json());
const LoginSchema = z.object({
// In this example we will only validate the request body.
body: z.object({
// email should be valid and non-empty
email: z.string().email(),
// password should be atleast 6 characters
password: z.string().min(6),
}),
});
// ...
Nyní vytvoříme náš middleware pro ověření Zod.
// ...
const validate = (schema) => (req, res, next) => {
try {
schema.parse({
body: req.body,
query: req.query,
params: req.params,
});
next();
} catch (err) {
return res.status(400).send(err.errors);
}
};
// ...
Nakonec vytvoříme trasu (/login
) pro POST
žádosti,
který použijeme náš middleware (validate
) k provedení ověření těla žádosti.
// ...
// pass LoginSchema to validate middleware
app.post("/login", validate(LoginSchema), (req, res) => {
return res.json({ ...req.body });
});
// ...
Konečný kód by byl následující:
const express = require("express");
const { z } = require("zod");
const app = express();
app.use(express.json());
const LoginSchema = z.object({
// In this example we will only validate the request body.
body: z.object({
// email should be valid and non-empty
email: z.string().email(),
// password should be atleast 6 characters
password: z.string().min(6),
}),
});
const validate = (schema) => (req, res, next) => {
try {
schema.parse({
body: req.body,
query: req.query,
params: req.params,
});
next();
} catch (err) {
return res.status(400).send(err.errors);
}
};
app.post("/login", validate(LoginSchema), (req, res) => {
return res.json({ ...req.body });
});
app.listen(1337, () => console.log(`> Ready on http://localhost:${1337}`));
Závěr
V této příručce jsme se naučili, jak ověřit naše volání Express.js REST API pomocí Zod. Kód najdete na GitHubu.
Pokud máte nějaké dotazy, kontaktujte mě.