Suojaa sovelluksesi vahvistamalla tiedot pyyntötasolla Joi-validointikirjaston avulla.

Testaamattomien ja vahvistamattomien tietojen hyväksyminen verkkosovellukseen voi aiheuttaa tietoturva-aukkoja, ja virheellisistä tiedoista voi aiheutua odottamattomia ongelmia.

Node.js ORM: ien, kuten Sequelize ja TypeORM, avulla voit asettaa vahvistussääntöjä suoraan sovellustasolla. API-kehityksen aikana data tulee HTTP-pyynnöistä tiettyihin päätepisteisiin. Tämä tapahtuu pyyntötasolla; Näin ollen ORM: iden tarjoama oletustarkistus ei koske niitä.

Joi on JavaScriptin skeeman kuvaus ja tietojen tarkistaja. Täällä opit käyttämään Joi-todennuskirjastoa tietojen vahvistamiseen pyyntötasolla.

Esittelyprojektin perustaminen

Osoittaakseen kuinka Joi validoi tiedot, rakennat yksinkertaisen esittelysovelluksen, joka jäljittelee todellista sovellusta.

Luo ensin projektikansio ja siirry siihen suorittamalla seuraava komento:

mkdir demoapp && cd demoapp

Alusta seuraavaksi npm projektihakemistossasi suorittamalla:

npm init -y
instagram viewer

Seuraavaksi sinun on asennettava joitain riippuvuuksia. Tässä opetusohjelmassa vaadittavat riippuvuudet sisältävät seuraavat:

  • Ilmaista: Express on Node.js-kehys joka tarjoaa vankan joukon ominaisuuksia verkko- ja mobiilisovelluksiin. Express helpottaa taustasovellusten rakentamista Node.js: n avulla.
  • Joi: Joi on Node.js: n tietojen vahvistuskirjasto.

Asenna riippuvuudet kanssa solmun pakettien hallinta suorittamalla alla oleva komento:

npm install express joi

Luo seuraavaksi an index.js tiedosto juurihakemistoosi ja lisää siihen seuraava koodilohko:

konst express = vaatia("ilmaista");
konst reititin = vaatia("./routes");
konst portti = 3000;

konst sovellus = express();

app.use (express.json());
app.use (express.urlencoded({ laajennettu: totta }));
app.use (reititin);

app.listen (portti, () => {
konsoli.Hirsi("sovellus kuuntelee portissa 3000!");
});

Yllä oleva koodilohko perustaa yksinkertaisen Express-palvelimen. Se määrittää väliohjelmiston jäsentämään saapuvat pyyntötiedot ja käsittelemään saapuvat pyynnöt ja käynnistää palvelimen kuuntelemaan saapuvia pyyntöjä portista 3000.

Reititys- ja käsittelypyynnöt

Yksinkertaisuuden vuoksi luot pyynnönkäsittelijän väliohjelmiston, joka palauttaa tilakoodin pyynnön rungon kanssa vastauksena jokaiseen pyyntöön, joka yrittää lähettää tietoja sovellukseesi.

Luo handler.js tiedosto projektisi juurihakemistoon ja lisää alla oleva koodilohko:

konst demoHandler = (req, res, next) => {
res.send({
koodi: 201,
tiedot: req.body,
});
Seuraava();
};

moduuli.exports = demoHandler;

Luo seuraavaksi a reititin.js tiedosto projektisi juurihakemistoon ja lisää alla oleva koodilohko tiedostoosi:

konst express = vaatia("ilmaista");
konst demoHandler = vaatia("./käsittelijä");
konst reititin = express. Reititin();

router.post("/Kirjaudu", demoHandler);

moduuli.exports = reititin;

Joi-skeeman luominen

Joi-skeema edustaa tietyn tietoobjektin odotettua rakennetta ja vahvistussääntöjä.

Voit luoda Joi-skeeman käyttämällä Joi.object() menetelmä ja ketju Joi paljastaa erilaisia ​​validointisääntöjä määrittääksesi tietosi rakenteen ja validointivaatimukset.

Esimerkiksi:

konst esimerkkiSchema = Joi.object({
nimi: Joi.string().min(3).edellytetään(),
});

Yllä oleva esimerkki kuvaa yksinkertaista Joi-skeemaa, jossa on a nimi omaisuutta. The nimi omaisuudella on arvo Joi.string().min (3).pakollinen(). Tämä tarkoittaa, että nimi arvon tulee olla merkkijono, jonka pituus on vähintään 3 merkkiä, ja se on pakollinen.

Join avulla voit ketjuttaa erilaisia ​​menetelmiä lisätäksesi vahvistusrajoituksia jokaiseen skeemasi määritettyyn kenttään.

Tässä on esimerkki, jossa on enemmän kenttiä ja vahvistusrajoituksia:

konst userSchema = Joi.object({
sähköposti: Joi.string().email().required(),

salasana: Joi.string().min(6).edellytetään(),

ikä: Joi.number().min(18).valinnainen(),

käytössä: Joi.boolean().optional(),

puhelin: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.edellytetään(),

osoite: Joi.object({
katu: Joi.string().min(3).edellytetään(),
kaupunki: Joi.string().min(3).edellytetään(),
tila: Joi.string().min(3).edellytetään(),
zip: Joi.number().min(3).edellytetään(),
}).edellytetään(),

 harrastukset: Joi.array().items (Joi.string()).required(),

}).optiot({ keskeyttää aikaisin: väärä });

The userSchema määrittää seuraavat rajoitukset kullekin ominaisuudelle:

  • sähköposti: Täytyy olla kelvollinen sähköpostimerkkijono.
  • Salasana: On oltava merkkijono, jossa on vähintään 6 merkkiä.
  • ikä: Valinnainen numero, jonka vähimmäisarvo on 18.
  • työllistetty: Valinnainen boolen arvo.
  • puhelin: Pakollinen merkkijono, joka vastaa määritettyä regex-lauseke (/^\d{3}-\d{3}-\d{4}$/).
  • osoite: Objekti, joka edustaa käyttäjän osoitetta seuraavilla aliominaisuuksilla.
    • katu: pakollinen merkkijono, jonka vähimmäispituus on 3 merkkiä.
    • kaupunki: pakollinen merkkijono, jonka vähimmäispituus on 3 merkkiä.
    • osavaltio: pakollinen merkkijono, jonka vähimmäispituus on 3 merkkiä.
    • postinumero: Pakollinen luku, jonka vähimmäisarvo on 3.
  • harrastuksia: Vaadittu joukko merkkijonoja.

Rajojen lisäksi mm. userSchema asettaa keskeyttää aikaisin vaihtoehto väärä. Oletusarvoisesti Joi pysäyttää ohjelman suorittamisen heti, kun se havaitsee ensimmäisen virheen ja tulostaa virheen konsoliin. Aseta tämä vaihtoehto kuitenkin arvoon väärä varmistaa, että Joi tarkistaa koko skeeman ja tulostaa kaikki havaitut virheet konsoliin.

Tietojen vahvistaminen Joilla

Luo validation.js tiedosto ja lisää userSchema koodi siihen.

Niin kuin:

//validation.js
konst Joi = vaatia("joi");

konst userSchema = Joi.object({
//...
}).optiot({ keskeyttää aikaisin: väärä });

moduuli.exports = userSchema;

Luo sitten väliohjelmisto, joka sieppaa pyyntöhyötykuormat ja tarkistaa ne toimitetun skeeman mukaan lisäämällä seuraavan koodin userSchema koodi.

konst validationMiddleware = (kaava) => {
palata(req, res, next) => {
konst { virhe } = schema.validate (req.body);

jos (virhe) {
// Käsittele vahvistusvirhe
konsoli.log (error.message);

res.status(400).json({ virheitä: error.details });
} muu {
// Tiedot ovat kelvollisia, siirry seuraavaan väliohjelmistoon
Seuraava();
}
};
};

Kun pyyntö tehdään, väliohjelmisto kutsuu vahvistaa menetelmä kaava pyynnön elimen vahvistamiseksi. Jos vahvistusvirheitä ilmenee, väliohjelmisto lähettää a 400 Virheellinen pyyntö vastaus virheilmoituksilla, jotka on poimittu vahvistusvirhetiedoista.

Toisaalta, jos validointi onnistuu ilman virheitä, väliohjelmisto kutsuu Seuraava() toiminto.

Vie lopuksi validointi väliohjelmisto ja userSchema.

moduuli.exports = {
userSchema,
validointi väliohjelmisto,
};

Validointirajoitusten testaus

Tuonti validointi väliohjelmisto ja userSchema sinun reititin.js tiedosto ja asenna väliohjelmisto seuraavasti:

konst { validationMiddleware, userSchema } = vaatia("./validation");

router.post("/Kirjaudu", validationMiddleware (userSchema), demoHandler);

Aloita sovelluksesi suorittamalla alla oleva komento:

solmuindeksi.js

Tee sitten HTTP POST -pyyntö osoitteeseen localhost: 3000/rekisteröinti käyttämällä alla olevia testitietoja. Voit saavuttaa tämän käyttämällä cURL-osoitetta tai mitä tahansa muuta API-asiakasta.

{
"sähköposti": "käyttäjä@esimerkki", // Virheellinen sähköpostimuoto
"Salasana": "kulkea", // Salasanan pituus alle 6 merkkiä
"ikä": 15, // Ikä alle 18
"työssä": totta,
"harrastukset": ["lukeminen", "juoksu"],
"puhelin": "123-456-789", // Virheellinen puhelinnumeron muoto
"osoite": {
"katu": "123",
"kaupunki": "Esimerkkikaupunki",
"osavaltio": "Esimerkkivaltio",
"postinumero": 12345
}
}

Tämä pyyntö epäonnistuu ja palauttaa virheobjektin, koska hyötykuorma sisältää paljon virheellisiä kenttiä, kuten sähköpostiosoite, salasana, ikä ja puhelin. Toimitetun virheobjektin avulla voit hoitaa virheet asianmukaisesti.

Tietojen validoinnin yksinkertaistaminen Joilla

Tässä käsittelitte suurimman osan tietojen validoinnin perusteista Joilla. Voit kuitenkin kattaa edistyneemmät tekniikat ja rajoitukset Joi-dokumentaatiossa.

Joi yksinkertaistaa tietojen validointitehtävää JavaScriptissä tarjoten intuitiivisen ratkaisun, joka parantaa merkittävästi sovellukseesi tallennettujen tietojen luotettavuutta ja eheyttä.