Osigurajte svoje aplikacije potvrđivanjem podataka na razini zahtjeva pomoću knjižnice za provjeru valjanosti Joi.
Prihvaćanje neprovjerenih i neprovjerenih podataka u web aplikaciju može prouzročiti sigurnosnu ranjivost, a zbog nevažećih podataka mogu nastati nepredviđeni problemi.
Node.js ORM-ovi, kao što su Sequelize i TypeORM, omogućuju vam postavljanje pravila provjere valjanosti odmah na razini aplikacije. Tijekom razvoja API-ja, podaci dolaze iz HTTP zahtjeva do određenih krajnjih točaka. To se događa na razini zahtjeva; stoga se zadana provjera valjanosti koju nude ORM-ovi ne odnosi na njih.
Joi je opis sheme i validator podataka za JavaScript. Ovdje ćete naučiti kako koristiti biblioteku za provjeru valjanosti Joi za provjeru podataka na razini zahtjeva.
Postavljanje demo projekta
Da pokažem kako Joi potvrđuje podatke, izgradit ćete jednostavnu demo aplikaciju koja oponaša stvarnu aplikaciju.
Najprije stvorite mapu projekta i prijeđite u nju izvođenjem sljedeće naredbe:
mkdir demoapp && cd demoapp
Zatim inicijalizirajte npm u direktoriju vašeg projekta pokretanjem:
npm init -y
Zatim ćete morati instalirati neke ovisnosti. Ovisnosti potrebne za ovaj vodič uključuju sljedeće:
- Izraziti: Express je okvir Node.js koji pruža robustan skup značajki za web i mobilne aplikacije. Express olakšava izradu pozadinskih aplikacija s Node.js.
- Joi: Joi je biblioteka za provjeru valjanosti podataka za Node.js.
Instalirajte ovisnosti s upravitelj paketa čvora pokretanjem naredbe ispod:
npm instalirajte express joi
Zatim izradite index.js datoteku u vašem korijenskom direktoriju i dodajte joj sljedeći blok koda:
konst izraziti = zahtijevati("izraziti");
konst ruter = zahtijevati("./rute");
konst luka = 3000;konst app = express();
app.use (express.json());
app.use (express.urlencoded({ proširena: pravi }));
app.use (usmjerivač);
app.listen (port, () => {
konzola.log("aplikacija sluša na priključku 3000!");
});
Gornji blok koda postavlja jednostavan Express poslužitelj. On konfigurira međuprogram za analizu podataka o dolaznim zahtjevima i rukovanje dolaznim zahtjevima te pokreće poslužitelj da osluškuje dolazne zahtjeve na portu 3000.
Usmjeravanje i rukovanje zahtjevima
Radi jednostavnosti, stvorit ćete međuprogram za obradu zahtjeva koji vraća statusni kod, zajedno s tijelom zahtjeva, kao odgovor na svaki zahtjev koji pokušava poslati podatke vašoj aplikaciji.
Stvoriti rukovatelj.js datoteku u korijenskom direktoriju vašeg projekta i dodajte blok koda u nastavku:
konst demoHandler = (req, res, next) => {
res.send({
kodirati: 201,
podaci: req.body,
});
Sljedeći();
};
modul.exports = demoHandler;
Zatim stvorite a usmjerivač.js datoteku u korijenskom direktoriju vašeg projekta i dodajte blok koda u nastavku u svoju datoteku:
konst izraziti = zahtijevati("izraziti");
konst demoHandler = zahtijevati("./rukovatelj");
konst ruter = express. Usmjerivač();usmjerivač.post("/prijava", demoHandler);
modul.exports = usmjerivač;
Stvaranje Joi sheme
Joi shema predstavlja očekivanu strukturu i pravila provjere valjanosti određenog podatkovnog objekta.
Za izradu Joi sheme možete koristiti Joi.objekt() metoda i lanac različitih pravila provjere valjanosti koje je izložio Joi kako bi definirao strukturu i zahtjeve provjere valjanosti za vaše podatke.
Na primjer:
konst primjerSchema = Joi.object({
ime: Joi.string().min(3).potreban(),
});
Gornji primjer opisuje jednostavnu Joi shemu s a Ime vlasništvo. The Ime imovina ima vrijednost Joi.string().min (3).required(). To znači da je Ime vrijednost treba biti niz, s minimalnom duljinom od 3 znaka, i to je obavezno.
Koristeći Joi, možete lančano povezati različite metode za dodavanje više ograničenja provjere valjanosti svakom polju definiranom u vašoj shemi.
Evo primjera s više polja i ograničenja valjanosti:
konst userSchema = Joi.object({
email: Joi.string().email().required(),lozinka: Joi.string().min(6).potreban(),
dob: Joi.number().min(18).neobavezno(),
zaposleno: Joi.boolean().optional(),
telefon: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.potreban(),adresa: Joi.object({
ulica: Joi.string().min(3).potreban(),
grad: Joi.string().min(3).potreban(),
stanje: Joi.string().min(3).potreban(),
zip: Joi.number().min(3).potreban(),
}).potreban(),hobiji: Joi.array().items (Joi.string()).required(),
}).opcije({ prekinutiEarly: lažno });
The korisnička shema definira sljedeća ograničenja za svako svojstvo:
- elektronička pošta: Mora biti važeći niz e-pošte.
- lozinka: Mora biti niz s najmanje 6 znakova.
- dob: izborni broj s minimalnom vrijednošću od 18.
- zaposlen: izborni Booleov.
- telefon: Potreban niz koji odgovara navedenom regularni izraz (/^\d{3}-\d{3}-\d{4}$/).
-
adresa: Objekt koji predstavlja adresu korisnika sa sljedećim pod-svojstvima.
- ulica: Potreban niz s minimalnom duljinom od 3 znaka.
- Grad: Potreban niz s minimalnom duljinom od 3 znaka.
- država: Potreban niz s minimalnom duljinom od 3 znaka.
- zip: Potreban broj s minimalnom vrijednošću 3.
- hobiji: Potreban niz nizova.
Pored ograničenja, korisnička shema postavlja prekinutiEarly opcija za lažno. Prema zadanim postavkama, Joi zaustavlja izvođenje programa čim naiđe na prvu pogrešku i ispisuje pogrešku na konzolu. Međutim, postavljanje ove opcije na lažno osigurava da Joi provjerava cijelu shemu i ispisuje sve uočene pogreške na konzolu.
Provjera valjanosti podataka pomoću Joija
Stvoriti validacija.js datoteku i dodajte korisnička shema kod za to.
ovako:
//validation.js
konst Joi = zahtijevati("joi");konst userSchema = Joi.object({
//...
}).opcije({ prekinutiEarly: lažno });
modul.exports = korisnička shema;
Zatim izradite međuprogram koji presreće sadržaje zahtjeva i provjerava ih u odnosu na danu shemu dodavanjem sljedećeg koda ispod korisnička shema kodirati.
konst validationMiddleware = (shema) => {
povratak(req, res, next) => {
konst { error } = schema.validate (req.body);ako (pogreška) {
// Rješavanje pogreške provjere valjanosti
konzola.log (greška.poruka);
res.status(400).json({ pogreške: detalji o grešci });
} drugo {
// Podaci su valjani, prijeđite na sljedeći međuprogram
Sljedeći();
}
};
};
Kada se podnese zahtjev, međuprogram poziva potvrditi metoda shema za provjeru valjanosti tijela zahtjeva. Ako dođe do bilo kakvih pogrešaka provjere valjanosti, međuprogram šalje a 400 Loš zahtjev odgovor s porukama o pogreškama izdvojenim iz pojedinosti o pogrešci provjere valjanosti.
S druge strane, ako provjera valjanosti prođe bez grešaka, međuprogram poziva Sljedeći() funkcija.
Na kraju, izvezite validationMiddleware i korisnička shema.
modul.izvoz = {
korisnička shema,
validacija srednjeg softvera,
};
Testiranje ograničenja valjanosti
Uvoz validationMiddleware i korisnička shema u tvoju usmjerivač.js datoteku i postavite srednji softver ovako:
konst { validationMiddleware, userSchema } = zahtijevati("./provjera valjanosti");
usmjerivač.post("/prijava", validationMiddleware (userSchema), demoHandler);
Pokrenite svoju aplikaciju pokretanjem naredbe ispod:
čvorindeks.js
Zatim napravite HTTP POST zahtjev za lokalni host: 3000/prijava koristeći dolje navedene testne podatke. To možete postići koristeći cURL ili bilo koji drugi API klijent.
{
"e-pošta": "korisnik@primjer", // Nevažeći format e-pošte
"lozinka": "proći", // Dužina lozinke manja od 6 znakova
"dob": 15, // Dob ispod 18 godina
"zaposlen": pravi,
"hobiji": ["čitanje", "trčanje"],
"telefon": "123-456-789", // Nevažeći format telefonskog broja
"adresa": {
"ulica": "123",
"Grad": "Grad za primjer",
"država": "Država za primjer",
"zip": 12345
}
}
Ovaj zahtjev ne bi uspio i vratio bi objekt pogreške jer korisni sadržaj sadrži puno nevažećih polja, kao što su e-pošta, lozinka, dob i telefon. Koristeći navedeni objekt pogreške, možete rješavati pogreške prikladno.
Pojednostavljivanje provjere valjanosti podataka uz Joi
Ovdje ste pokrili većinu osnova provjere valjanosti podataka pomoću Joija. Međutim, možete pokriti naprednije tehnike i ograničenja u Joi dokumentaciji.
Joi pojednostavljuje zadatak provjere podataka u JavaScriptu, pružajući intuitivno rješenje koje značajno poboljšava pouzdanost i integritet podataka pohranjenih u vašoj aplikaciji.