Kaitske oma rakendusi, valideerides andmed päringu tasemel, kasutades Joi valideerimisteegi.
Testimata ja kinnitamata andmete vastuvõtmine veebirakendusse võib põhjustada turvaauke ning kehtetutest andmetest võivad tekkida ettenägematud probleemid.
Node.js-i ORM-id, nagu Sequelize ja TypeORM, võimaldavad teil määrata valideerimisreegleid rakenduse tasemel. API arendamise ajal tulevad andmed HTTP päringutest konkreetsetesse lõpp-punktidesse. See juhtub päringu tasemel; seega ei kehti ORM-ide pakutav vaikevalideerimine neile.
Joi on JavaScripti skeemi kirjeldus ja andmete valideerija. Siit saate teada, kuidas kasutada Joi valideerimisteeki andmete kinnitamiseks päringu tasemel.
Demoprojekti seadistamine
Et näidata, kuidas Joi valideerib andmeid, saate luua lihtsa demorakenduse, mis jäljendab tegelikku rakendust.
Kõigepealt looge projekti kaust ja liikuge sellesse, käivitades järgmise käsu:
mkdir demoapp && cd demoapp
Järgmisena lähtestage npm oma projektikataloogis, käivitades:
npm init -y
Järgmisena peate installima mõned sõltuvused. Selle õpetuse jaoks vajalikud sõltuvused hõlmavad järgmist.
- Ekspress: Express on Node.js raamistik mis pakub veebi- ja mobiilirakenduste jaoks tugevat funktsioonide komplekti. Express muudab Node.js-iga taustarakenduste loomise lihtsamaks.
- Joi: Joi on Node.js-i andmete valideerimise teek.
Installige sõltuvused rakendusega sõlme paketihaldur käivitades alloleva käsu:
npm install express joi
Järgmisena looge an index.js fail oma juurkataloogis ja lisage sellele järgmine koodiplokk:
konst väljendada = nõuda("väljendama");
konst ruuter = nõuda("./marsruudid");
konst port = 3000;konst rakendus = express();
app.use (express.json());
app.use (express.urlencoded({ pikendatud: tõsi }));
app.use (ruuter);
app.listen (port, () => {
konsool.log("rakendus kuulab pordis 3000!");
});
Ülaltoodud koodiplokk seadistab lihtsa Express-serveri. See konfigureerib vahevara sissetulevate päringute andmete sõelumiseks ja sissetulevate päringute käsitlemiseks ning käivitab serveri, et kuulata sissetulevaid päringuid pordis 3000.
Marsruutimis- ja käsitlemistaotlused
Lihtsuse huvides loote päringutöötleja vahevara, mis tagastab olekukoodi koos päringu kehaga vastusena igale päringule, mis üritab teie rakendusele andmeid saata.
Loo handler.js faili oma projekti juurkataloogi ja lisage allpool olev koodiplokk:
konst demoHandler = (req, res, next) => {
res.send({
kood: 201,
andmed: req.body,
});
next();
};
moodul.exports = demoHandler;
Järgmisena looge a ruuter.js faili oma projekti juurkataloogi ja lisage oma failile allolev koodiplokk:
konst väljendada = nõuda("väljendama");
konst demoHandler = nõuda("./handler");
konst ruuter = ekspress. Ruuter ();ruuter.post("/Registreeri", demoHandler);
moodul.exports = ruuter;
Joi skeemi loomine
Joi skeem esindab konkreetse andmeobjekti eeldatavat struktuuri ja valideerimisreegleid.
Joi skeemi loomiseks võite kasutada Joi.object() meetod ja aheldada erinevaid Joi avaldatud valideerimisreegleid, et määratleda teie andmete struktuur ja valideerimisnõuded.
Näiteks:
konst exampleSchema = Joi.object({
nimi: Joi.string().min(3).nõutud(),
});
Ülaltoodud näide kirjeldab lihtsat Joi skeemi koos a nimi vara. The nimi vara väärtus on Joi.string().min (3).required(). See tähendab, et nimi väärtus peab olema string, mille minimaalne pikkus on 3 tähemärki ja see on kohustuslik.
Joi abil saate aheldada erinevaid meetodeid, et lisada igale skeemis määratletud väljale rohkem valideerimispiiranguid.
Siin on näide rohkemate väljade ja valideerimispiirangutega.
konst userSchema = Joi.object({
email: Joi.string().email().required(),parool: Joi.string().min(6).nõutud(),
vanus: Joi.number().min(18).valikuline(),
kasutatud: Joi.boolean().optional(),
telefon: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.nõutud(),aadress: Joi.object({
tänav: Joi.string().min(3).nõutud(),
linn: Joi.string().min(3).nõutud(),
olek: Joi.string().min(3).nõutud(),
zip: Joi.number().min(3).nõutud(),
}).nõutud(),hobid: Joi.array().items (Joi.string()).required(),
}).valikud({ katkestada varakult: vale });
The kasutajaskeem määrab iga atribuudi jaoks järgmised piirangud:
- email: peab olema kehtiv e-posti string.
- parool: peab olema string, milles on vähemalt 6 tähemärki.
- vanus: valikuline arv minimaalse väärtusega 18.
- tööle võetud: valikuline tõeväärtus.
- telefon: nõutav string, mis vastab määratud stringile regex avaldis (/^\d{3}-\d{3}-\d{4}$/).
-
aadress: objekt, mis esindab kasutaja aadressi järgmiste alamomadustega.
- tänav: nõutav string, mille minimaalne pikkus on 3 tähemärki.
- linn: nõutav string, mille minimaalne pikkus on 3 tähemärki.
- olek: nõutav string, mille minimaalne pikkus on 3 tähemärki.
- tõmblukk: nõutav arv minimaalse väärtusega 3.
- hobid: vajalik stringide massiiv.
Lisaks piirangutele, kasutajaskeem määrab katkestada varakult võimalus vale. Vaikimisi peatab Joi programmi täitmise kohe, kui ilmneb esimene tõrge ja prindib vea konsooli. Kuid määrates selle valiku väärtusele vale tagab, et Joi kontrollib kogu skeemi ja prindib kõik ilmnenud vead konsooli.
Andmete kinnitamine Joiga
Loo validation.js faili ja lisage kasutajaskeem kood sellele.
Nagu nii:
//validation.js
konst Joi = nõuda("joi");konst userSchema = Joi.object({
//...
}).valikud({ katkestada varakult: vale });
moodul.exports = userSchema;
Seejärel looge vahevara, mis peatab päringu kasulikud koormused ja kontrollib neid esitatud skeemi alusel, lisades järgmise koodi kasutajaskeem kood.
konst validationMiddleware = (skeem) => {
tagasi(req, res, next) => {
konst { error } = schema.validate (req.body);kui (viga) {
// Käsitsege valideerimisviga
konsool.log (error.message);
res.status(400).json({ vead: veadetailid });
} muidu {
// Andmed kehtivad, jätkake järgmise vahevaraga
next();
}
};
};
Kui päring tehakse, kutsub vahevara välja kinnitada meetod skeem päringu keha kinnitamiseks. Valideerimisvigade ilmnemisel saadab vahevara a 400 halb taotlus vastuseks valideerimisvea üksikasjadest eraldatud veateadetega.
Teisest küljest, kui valideerimine möödub vigadeta, helistab vahevara järgmine () funktsiooni.
Lõpuks eksportige valideerimine Vahevara ja kasutajaskeem.
moodul.exports = {
kasutajaskeem,
valideerimine vahevara,
};
Valideerimispiirangute testimine
Import valideerimine Vahevara ja kasutajaskeem sinu sisse ruuter.js faili ja seadistage vahevara järgmiselt:
konst { validationMiddleware, userSchema } = nõuda("./kinnitamine");
ruuter.post("/Registreeri", validationMiddleware (userSchema), demoHandler);
Käivitage oma rakendus, käivitades alloleva käsu:
sõlmindeks.js
Seejärel esitage HTTP POST-i päring localhost: 3000 / registreerumine kasutades allolevaid katseandmeid. Seda saate saavutada cURL-i või mõne muu API kliendi abil.
{
"e-post": "kasutaja@näide", // Kehtetu meilivorming
"parool": "üle andma", // Parooli pikkus alla 6 tähemärgi
"vanus": 15, // Vanus alla 18 aasta
"töötav": tõsi,
"hobid": ["lugemine", "jooksma"],
"telefon": "123-456-789", // Kehtetu telefoninumbri vorming
"aadress": {
"tänav": "123",
"linn": "Näidislinn",
"osariik": "Näidisriik",
"tõmblukk": 12345
}
}
See taotlus nurjub ja tagastab veaobjekti, kuna kasulik koormus sisaldab palju kehtetuid välju, nagu e-post, parool, vanus ja telefon. Kasutades pakutud veaobjekti, saate vigadega hakkama saama sobivalt.
Andmete valideerimise lihtsustamine Joi abil
Siin käsitlesite enamikku Joi abil andmete valideerimise põhitõdesid. Kuid täiustatud tehnikaid ja piiranguid saate käsitleda Joi dokumentatsioonis.
Joi lihtsustab andmete valideerimise ülesannet JavaScriptis, pakkudes intuitiivset lahendust, mis parandab oluliselt teie rakenduses salvestatud andmete usaldusväärsust ja terviklikkust.