Biztosítsa alkalmazásait az adatok kérésszintű érvényesítésével a Joi érvényesítési könyvtár használatával.

A nem tesztelt és nem ellenőrzött adatok webalkalmazásba fogadása biztonsági réseket okozhat, és előre nem látható problémák adódhatnak az érvénytelen adatokból.

A Node.js ORM-ek, például a Sequelize és a TypeORM lehetővé teszik, hogy az alkalmazás szintjén azonnal beállítson érvényesítési szabályokat. Az API-fejlesztés során az adatok HTTP-kérésekből érkeznek meghatározott végpontokhoz. Ez a kérés szintjén történik; így az ORM-ek által kínált alapértelmezett érvényesítés nem vonatkozik rájuk.

A Joi egy sémaleíró és adatellenőrző a JavaScripthez. Itt megtudhatja, hogyan használhatja a Joi érvényesítési könyvtárat az adatok kérésszintű érvényesítésére.

Demóprojekt beállítása

Hogy bemutassam, hogyan Joi érvényesíti az adatokat, akkor egy egyszerű bemutatóalkalmazást fog készíteni, amely egy tényleges alkalmazást utánoz.

Először hozzon létre egy projekt mappát, és lépjen be a következő parancs futtatásával:

instagram viewer
mkdir demoapp && cd demoapp

Ezután inicializálja az npm-et a projektkönyvtárban a következő futtatással:

npm init -y

Ezután telepítenie kell néhány függőséget. Az oktatóanyaghoz szükséges függőségek a következők:

  • Expressz: Az Express egy Node.js keretrendszer amely robusztus funkciókészletet biztosít webes és mobilalkalmazásokhoz. Az Express megkönnyíti a háttéralkalmazások készítését a Node.js segítségével.
  • Joi: A Joi egy adatellenőrző könyvtár a Node.js számára.

Telepítse a függőségeket a a csomóponti csomagkezelő az alábbi parancs futtatásával:

npm install express joi

Ezután hozzon létre egy index.js fájlt a gyökérkönyvtárba, és adja hozzá a következő kódblokkot:

const expressz = igényelnek("Expressz");
const router = igényelnek("./routes");
const port = 3000;

const app = express();

app.use (express.json());
app.use (express.urlencoded({ kiterjedt: igaz }));
app.use (router);

app.listen (port, () => {
konzol.log("alkalmazás figyel a 3000-es porton!");
});

A fenti kódblokk egy egyszerű Express szervert állít be. Beállítja a köztes szoftvert a bejövő kérések adatainak elemzésére és a bejövő kérések kezelésére, és elindítja a szervert, hogy figyelje a bejövő kéréseket a 3000-es porton.

Útválasztási és kezelési kérések

Az egyszerűség kedvéért létre kell hoznia egy kéréskezelő köztes szoftvert, amely állapotkódot ad vissza a kérés törzsével együtt válaszként minden olyan kérésre, amely megkísérel adatokat küldeni az alkalmazásnak.

Hozzon létre egy handler.js fájlt a projekt gyökérkönyvtárába, és adja hozzá az alábbi kódblokkot:

const demoHandler = (req, res, next) => {
res.send({
kód: 201,
adatok: req.body,
});
következő();
};

modult.exports = demoHandler;

Ezután hozzon létre a router.js fájlt a projekt gyökérkönyvtárába, és adja hozzá az alábbi kódblokkot a fájlhoz:

const expressz = igényelnek("Expressz");
const demoHandler = igényelnek("./kezelő");
const router = expressz. Router();

router.post("/regisztrálj", demoHandler);

modult.exports = útválasztó;

Joi-séma létrehozása

A Joi-séma egy adott adatobjektum várható szerkezetét és érvényesítési szabályait képviseli.

Joi séma létrehozásához használhatja a Joi.object() A Joi által közzétett különböző érvényesítési szabályokat az adatok struktúrájának és érvényesítési követelményeinek meghatározásához.

Például:

const exampleSchema = Joi.object({
név: Joi.string().min(3).kívánt(),
});

A fenti példa egy egyszerű Joi-sémát ír le a név ingatlan. A név az ingatlan értéke Joi.string().min (3).required(). Ez azt jelenti, hogy a név Az értéknek egy karakterláncnak kell lennie, legalább 3 karakter hosszúságú, és kötelező.

A Joi segítségével különféle módszereket láncolhat, hogy további érvényesítési megszorításokat adjon a sémában meghatározott minden egyes mezőhöz.

Íme egy példa több mezővel és érvényesítési megszorításokkal:

const userSchema = Joi.object({
email: Joi.string().email().required(),

jelszó: Joi.string().min(6).kívánt(),

életkor: Joi.szám().min(18).választható(),

alkalmazott: Joi.boolean().optional(),

telefon: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.kívánt(),

cím: Joi.object({
utca: Joi.string().min(3).kívánt(),
város: Joi.string().min(3).kívánt(),
állapot: Joi.string().min(3).kívánt(),
zip: Joi.szám().min(3).kívánt(),
}).kívánt(),

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

}).lehetőségek({ korán elvetél: hamis });

A userSchema a következő megszorításokat határozza meg minden tulajdonsághoz:

  • email: érvényes e-mail karakterláncnak kell lennie.
  • Jelszó: legalább 6 karakterből álló karakterláncnak kell lennie.
  • kor: Nem kötelező szám, minimum 18.
  • munkavállaló: Opcionális logikai érték.
  • telefon: Egy kötelező karakterlánc, amely megfelel a megadottnak regex kifejezés (/^\d{3}-\d{3}-\d{4}$/).
  • cím: A felhasználó címét képviselő objektum a következő altulajdonságokkal.
    • utca: Kötelező karakterlánc, legalább 3 karakter hosszúságú.
    • város: Kötelező karakterlánc, legalább 3 karakter hosszúságú.
    • állapot: Kötelező karakterlánc, legalább 3 karakter hosszúságú.
    • postai irányítószám: kötelező szám, minimum 3.
  • hobbi: A karakterláncok kötelező tömbje.

A korlátok mellett, userSchema beállítja a korán elvetél opciót hamis. Alapértelmezés szerint a Joi leállítja a program végrehajtását, amint az első hibát észleli, és kinyomtatja a hibát a konzolra. Ennek az opciónak a beállítása azonban hamis biztosítja, hogy Joi ellenőrzi a teljes sémát, és kinyomtatja az összes talált hibát a konzolra.

Adatok ellenőrzése Joi segítségével

Hozzon létre egy validation.js fájlt, és adja hozzá a userSchema kódot hozzá.

Például így:

//validation.js
const Joi = igényelnek("joi");

const userSchema = Joi.object({
//...
}).lehetőségek({ korán elvetél: hamis });

modult.exports = userSchema;

Ezután hozzon létre egy köztes szoftvert, amely elfogja a kérések hasznos terheit, és ellenőrzi azokat a megadott séma alapján úgy, hogy hozzáadja a következő kódot a userSchema kód.

const validationMiddleware = (séma) => {
Visszatérés(req, res, next) => {
const {hiba} = schema.validate (req.body);

ha (hiba) {
// Érvényesítési hiba kezelése
konzol.log (error.message);

res.status(400).json({ hibákat: hiba részletei });
} más {
// Az adatok érvényesek, folytassa a következő köztes szoftverrel
következő();
}
};
};

Amikor egy kérés érkezik, a köztes szoftver meghívja a érvényesít módszere a séma a kérelmező szerv érvényesítésére. Ha bármilyen érvényesítési hiba történik, a köztes szoftver elküldi a 400 Hibás kérelem választ az érvényesítési hiba részleteiből kinyert hibaüzenetekkel.

Másrészt, ha az érvényesítés hiba nélkül megy, a köztes szoftver meghívja a következő() funkció.

Végül exportálja a validationKözépprogram és userSchema.

modult.exports = {
felhasználói séma,
validationKözépprogram,
};

Érvényesítési korlátok tesztelése

Importálás validationKözépprogram és userSchema a tiédbe router.js fájlt, és állítsa be a köztes szoftvert így:

const { validationMiddleware, userSchema } = igényelnek("./érvényesítés");

router.post("/regisztrálj", validationMiddleware (userSchema), demoHandler);

Indítsa el az alkalmazást az alábbi parancs futtatásával:

csomópontindex.js

Ezután küldjön egy HTTP POST kérést a következőnek localhost: 3000/regisztráció az alábbi tesztadatok felhasználásával. Ezt a cURL vagy bármely más API-kliens használatával érheti el.

{
"email": "felhasználó@példa", // Érvénytelen e-mail formátum
"Jelszó": "passz", // A jelszó hossza kevesebb, mint 6 karakter
"kor": 15, // 18 év alatti kor
"munkavállaló": igaz,
"hobbi": ["olvasás", "futás"],
"telefon": "123-456-789", // Érvénytelen telefonszám-formátum
"cím": {
"utca": "123",
"város": "Példaváros",
"állapot": "Példaállapot",
"postai irányítószám": 12345
}
}

Ez a kérés meghiúsulna, és hibaobjektumot adna vissza, mivel a rakomány sok érvénytelen mezőt tartalmaz, például e-mail-címet, jelszót, életkort és telefonszámot. A megadott hibaobjektum használatával megteheti kezelni a hibákat megfelelően.

Az adatérvényesítés egyszerűsítése a Joi segítségével

Itt bemutatta a Joi használatával végzett adatérvényesítés alapjait. A fejlettebb technikákat és megszorításokat azonban a Joi dokumentációjában tárgyalhatja.

A Joi leegyszerűsíti az adatellenőrzési feladatot a JavaScriptben, és olyan intuitív megoldást kínál, amely jelentősen javítja az alkalmazásban tárolt adatok megbízhatóságát és integritását.