Aizsargājiet savas lietojumprogrammas, apstiprinot datus pieprasījuma līmenī, izmantojot Joi validācijas bibliotēku.

Nepārbaudītu un nevalidētu datu pieņemšana tīmekļa lietojumprogrammā var radīt drošības ievainojamības, un nederīgo datu dēļ var rasties neparedzētas problēmas.

Node.js ORM, piemēram, Sequelize un TypeORM, ļauj iestatīt validācijas noteikumus lietojumprogrammas līmenī. API izstrādes laikā dati tiek iegūti no HTTP pieprasījumiem uz konkrētiem galapunktiem. Tas notiek pieprasījuma līmenī; tādējādi ORM piedāvātā noklusējuma validācija uz tiem neattiecas.

Joi ir JavaScript shēmas apraksts un datu pārbaudītājs. Šeit jūs uzzināsit, kā izmantot Joi validācijas bibliotēku, lai pārbaudītu datus pieprasījuma līmenī.

Demonstrācijas projekta iestatīšana

Lai parādītu, kā Joi apstiprina datus, jūs izveidosit vienkāršu demonstrācijas lietojumprogrammu, kas atdarina faktisko lietojumprogrammu.

Vispirms izveidojiet projekta mapi un pārvietojieties tajā, izpildot šādu komandu:

mkdir demoapp && cd demoapp
instagram viewer

Pēc tam inicializējiet npm savā projekta direktorijā, izpildot:

npm init -y

Tālāk jums būs jāinstalē dažas atkarības. Šai apmācībai nepieciešamās atkarības ir šādas:

  • Express: Express ir Node.js ietvars kas nodrošina spēcīgu funkciju kopumu tīmekļa un mobilajām lietojumprogrammām. Express atvieglo aizmugurprogrammu izveidi, izmantojot Node.js.
  • Joi: Joi ir Node.js datu validācijas bibliotēka.

Instalējiet atkarības ar mezgla pakotņu pārvaldnieks izpildot tālāk norādīto komandu:

npm install express joi

Pēc tam izveidojiet an index.js failu saknes direktorijā un pievienojiet tam šādu koda bloku:

konst izteikt = pieprasīt("izteikt");
konst maršrutētājs = pieprasīt("./routes");
konst ports = 3000;

konst lietotne = express();

app.use (express.json());
app.use (express.urlencoded({ pagarināts: taisnība }));
app.use (maršrutētājs);

app.listen (port, () => {
konsole.log("lietotne klausās portā 3000!");
});

Iepriekš minētais koda bloks izveido vienkāršu Express serveri. Tas konfigurē starpprogrammatūru, lai parsētu ienākošo pieprasījumu datus un apstrādātu ienākošos pieprasījumus, un sāk serveri, lai klausītos ienākošos pieprasījumus 3000. portā.

Maršrutēšanas un apstrādes pieprasījumi

Vienkāršības labad jūs izveidosit pieprasījumu apstrādātāja starpprogrammatūru, kas atgriež statusa kodu kopā ar pieprasījuma pamattekstu kā atbildi uz katru pieprasījumu, kas mēģina nosūtīt datus uz jūsu lietojumprogrammu.

Izveidot a handler.js failu sava projekta saknes direktorijā un pievienojiet tālāk norādīto koda bloku:

konst demoHandler = (req, res, next) => {
res.send({
kods: 201,
dati: req.body,
});
Nākamais();
};

modulis.exports = demoHandler;

Pēc tam izveidojiet a maršrutētājs.js failu sava projekta saknes direktorijā un failam pievienojiet tālāk norādīto koda bloku:

konst izteikt = pieprasīt("izteikt");
konst demoHandler = pieprasīt("./apdarinātājs");
konst maršrutētājs = ekspress. Maršrutētājs ();

router.post("/Pierakstīties", demoHandler);

modulis.exports = maršrutētājs;

Joi shēmas izveide

Joi shēma attēlo konkrēta datu objekta paredzamo struktūru un validācijas noteikumus.

Lai izveidotu Joi shēmu, varat izmantot Joi.object() metode un ķēde dažādi validācijas noteikumi, ko atklāj Joi, lai definētu jūsu datu struktūru un validācijas prasības.

Piemēram:

konst exampleSchema = Joi.object({
nosaukums: Joi.string().min(3).required(),
});

Iepriekš minētajā piemērā ir aprakstīta vienkārša Joi shēma ar a nosaukums īpašums. The nosaukums īpašumam ir vērtība Joi.string().min (3).required(). Tas nozīmē, ka nosaukums vērtībai ir jābūt virknei, kuras garums ir vismaz 3 rakstzīmes, un tā ir obligāta.

Izmantojot Joi, varat ķēdēt dažādas metodes, lai pievienotu vairāk validācijas ierobežojumu katram jūsu shēmā definētajam laukam.

Tālāk ir sniegts piemērs ar vairākiem laukiem un validācijas ierobežojumiem.

konst userSchema = Joi.object({
e-pasts: Joi.string().email().required(),

parole: Joi.string().min(6).required(),

vecums: Joi.number().min(18).neobligāti(),

nodarbināts: Joi.boolean().optional(),

Tālrunis: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.required(),

adrese: Joi.object({
iela: Joi.string().min(3).required(),
pilsēta: Joi.string().min(3).required(),
stāvoklis: Joi.string().min(3).required(),
zip: Joi.number().min(3).required(),
}).required(),

 vaļasprieki: Joi.array().items (Joi.string()).required(),

}).options({ pārtraukt agri: viltus });

The lietotāju shēma definē šādus ierobežojumus katram īpašumam:

  • e-pasts: jābūt derīgai e-pasta virknei.
  • parole: jābūt virknei ar vismaz 6 rakstzīmēm.
  • vecums: neobligāts skaitlis ar minimālo vērtību 18.
  • nodarbināts: neobligāts Būla vērtība.
  • tālrunis: obligāta virkne, kas atbilst norādītajai regex izteiksme (/^\d{3}-\d{3}-\d{4}$/).
  • adrese: objekts, kas attēlo lietotāja adresi ar šādiem apakšrekvizītiem.
    • iela: obligāta virkne, kuras garums ir vismaz 3 rakstzīmes.
    • pilsēta: obligāta virkne, kuras garums ir vismaz 3 rakstzīmes.
    • Valsts: obligāta virkne, kuras garums ir vismaz 3 rakstzīmes.
    • rāvējslēdzējs: nepieciešamais skaitlis ar minimālo vērtību 3.
  • vaļasprieki: nepieciešamais virkņu masīvs.

Papildus ierobežojumiem, lietotāju shēma nosaka pārtraukt agri iespēja uz viltus. Pēc noklusējuma Joi aptur programmas izpildi, tiklīdz tā konstatē pirmo kļūdu, un izdrukā kļūdu konsolē. Tomēr iestatot šo opciju uz viltus nodrošina, ka Joi pārbauda visu shēmu un visas konstatētās kļūdas izdrukā konsolē.

Datu apstiprināšana ar Joi

Izveidot a validation.js failu un pievienojiet lietotāju shēma kodu tam.

Tā kā:

//validation.js
konst Joi = pieprasīt("joi");

konst userSchema = Joi.object({
//...
}).options({ pārtraukt agri: viltus });

modulis.exports = userSchema;

Pēc tam izveidojiet starpprogrammatūru, kas pārtver pieprasījumu lietderīgās slodzes un pārbauda tās saskaņā ar sniegto shēmu, pievienojot šādu kodu zem lietotāju shēma kodu.

konst validationMiddleware = (shēma) => {
atgriezties(req, res, next) => {
konst { error } = schema.validate (req.body);

ja (kļūda) {
// Apstrādājiet validācijas kļūdu
konsole.log (error.message);

res.status(400).json({ kļūdas: error.details });
} cits {
// Dati ir derīgi, pārejiet pie nākamās starpprogrammatūras
Nākamais();
}
};
};

Kad tiek veikts pieprasījums, starpprogrammatūra izsauc apstiprināt metode shēma lai apstiprinātu pieprasījuma struktūru. Ja rodas validācijas kļūdas, starpprogrammatūra nosūta a 400 Slikts pieprasījums atbilde ar kļūdu ziņojumiem, kas iegūti no validācijas kļūdas informācijas.

No otras puses, ja validācija norit bez kļūdām, starpprogrammatūra izsauc Nākamais() funkciju.

Visbeidzot, eksportējiet validācija starpprogrammatūra un lietotāju shēma.

modulis.exports = {
lietotāju shēma,
validācija starpprogrammatūra,
};

Validācijas ierobežojumu pārbaude

Importēt validācija starpprogrammatūra un lietotāju shēma tavā maršrutētājs.js failu un iestatiet starpprogrammatūru šādi:

konst { validationMiddleware, userSchema } = pieprasīt("./validation");

router.post("/Pierakstīties", validationMiddleware (userSchema), demoHandler);

Sāciet lietojumprogrammu, izpildot tālāk norādīto komandu:

mezglsrādītājs.js

Pēc tam veiciet HTTP POST pieprasījumu localhost: 3000/reģistrēšanās izmantojot tālāk norādītos testa datus. To var panākt, izmantojot cURL vai jebkuru citu API klientu.

{
"e-pasts": "lietotājs@piemērs", // Nederīgs e-pasta formāts
"parole": "pāriet", // Paroles garums ir mazāks par 6 rakstzīmēm
"vecums": 15, // Vecums līdz 18 gadiem
"nodarbināts": taisnība,
"hobiji": ["lasīšana", "skriešana"],
"tālrunis": "123-456-789", // Nederīgs tālruņa numura formāts
"adrese": {
"iela": "123",
"pilsēta": "Piemēra pilsēta",
"Valsts": "Paraugvalsts",
"rāvējslēdzējs": 12345
}
}

Šis pieprasījums neizdosies un atgrieztu kļūdas objektu, jo kravnesībā ir daudz nederīgu lauku, piemēram, e-pasts, parole, vecums un tālrunis. Izmantojot sniegto kļūdas objektu, varat rīkoties ar kļūdām atbilstoši.

Datu apstiprināšanas vienkāršošana, izmantojot Joi

Šeit jūs apskatījāt lielāko daļu datu validācijas pamatu, izmantojot Joi. Tomēr Joi dokumentācijā varat apskatīt sarežģītākas metodes un ierobežojumus.

Joi vienkāršo datu validācijas uzdevumu JavaScript, nodrošinot intuitīvu risinājumu, kas ievērojami uzlabo jūsu lietojumprogrammā saglabāto datu uzticamību un integritāti.