Útmutató a kivételek kezeléséhez az Express PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

Útmutató a kivételkezeléshez az Expressben

Bevezetés

Kivételek és hibák előfordulhatnak, amikor a felhasználók bármilyen alkalmazással interakcióba lépnek, a szoftvermérnökök feladata, hogy megválasszák az esetlegesen felmerülő hibák kezelésének módját – tudatosan vagy tudatlanul. Ennek eredményeként az API-kat az Express segítségével építő háttérfejlesztők azon fáradoznak, hogy hasznos, hatékony és használható API-t hozzanak létre. A legfontosabb az, hogy a hibákat úgy kezeljük, hogy robusztus rendszert építsünk fel, mert ez segít csökkenteni a fejlesztési időt, a közvetlen hibákat, a termelékenységi problémákat, és meghatározza a szoftverfejlesztés sikerét vagy méretezhetőségét.

Naplóznia kell a hibaüzenetet, el kell tiltania a hibát, értesítenie kell a felhasználókat a hibáról, vagy kódot kell írnia a hibák kezelésére? Ne csodálkozz tovább.

Ebben az útmutatóban megtudjuk, hogyan építsünk fel egy robusztus hibakezelő kódbázist az Express alkalmazásokhoz, amely segít észlelni az alkalmazáshibákat, és megteszi az optimális lépéseket az alkalmazások futás közbeni kecsesen meghibásodásának helyreállítására.

Jegyzet: A Postman segítségével teszteljük az API-t a bemutatónkban. Letöltheti a Postás letöltési oldal. Alternatív megoldásként egyszerűen használhatja a böngészőt, a parancssort curl eszközt, vagy bármilyen más eszközt, amelyet esetleg ismer.

Mi az a hibakezelés?

A szoftverfejlesztésben kétféle kivétel létezik: operatív és a programadó.

  • Működési hibák léphetnek fel futás közben, és annak érdekében, hogy megakadályozzuk az alkalmazás hirtelen leállását, ezeket a kivételeket hatékony hibakezelési módszerekkel kecsesen kell kezelnünk.
  • A programozási kivételeket a programozó manuálisan dobja ki, ha rendkívüli állapot lép fel.

A működési kivételeket „váratlan, de előre látható” kivételnek tekintheti (például egy index határon túli elérése), a programozási kivételeket pedig „várható és előre látható” kivételeknek (például számformázási kivételnek).

A kivételkezelés a programon belüli hibák megtalálására és kijavítására szolgáló eljárás. A hibakezelés olyan üzeneteket küld, amelyek tartalmazzák a megtörtént hiba típusát és azt a veret, ahol a hiba történt.

Jegyzet: A számítástechnikában a kivételek helyreállíthatók, és jellemzően működési vagy programozási problémákból fakadnak futás közben. A hibák általában külső tényezőkből adódnak, például hardverkorlátozásokból, kapcsolódási problémákból, memóriahiányból stb. A JavaScriptben a kifejezéseket gyakran felcserélhetően használják, és az egyéni kivételek a Error osztály. A Error maga az osztály egyaránt jelent hibákat és kivételeket.

Az Expressben a kivételkezelés arra utal, hogy az Express hogyan állítja be magát a szinkron és aszinkron kivételek elkapására és feldolgozására. Az Express kivételkezelésében az a jó, hogy fejlesztőként nem kell saját kivételkezelőket írnia; Az Express alapértelmezett kivételkezelővel érkezik. A kivételkezelő segít a hibák azonosításában és a felhasználó felé történő jelentésében. Különféle orvosi stratégiákat is kínál, és azokat a kivételek enyhítésére valósítja meg.

Bár úgy tűnhet, hogy ez sok dolog a burkolat alatt van, az Express kivételkezelése nem lassítja le a program teljes folyamatát, és nem szünetelteti a végrehajtását.

A kivételkezelés megértése az Expressben

Az Expresshez mellékelt alapértelmezett hibakezelővel egy sor köztes szoftver funkciót tartunk a kezünkben, amelyek segítenek az útvonalkezelők hibáinak automatikus észlelésében. Hamarosan létrehozunk egy projektet, amely az elméletet a gyakorlatba ülteti át arra vonatkozóan, hogyan lehet visszaadni a megfelelő hibákat egy Express alkalmazásban, és hogyan ne szivárogtassunk ki érzékeny információkat.

Köztesszoftver funkció meghatározása Expressben

A hibakezelő köztes szoftver függvények úgy vannak definiálva, hogy elfogadják a Error az objektum első bemeneti paramétere, majd bármely más köztes szoftver alapértelmezett paramétere: request, responseés next Az next() függvény átugorja az összes jelenlegi köztes szoftvert a router következő hibakezelőjéhez.

A hibakezelés beállítása az Expressben

Futtassa a következő parancsot a terminálon egy Node és Express alkalmazás létrehozásához:

$ mkdir error-handling-express

Az újonnan létrehozott mappában inicializáljunk egy új Node projektet:

$ cd error-handling-express && npm init -y

Ez létrehozza a package.json fájlt a mappánkban.

Express szerver létrehozásához a Node alkalmazásunkban telepítenünk kell a express csomag, dotenv a környezeti változók automatikus betöltéséhez .env fájl be process.env tárgy, és nodemon a csomópont alkalmazás újraindításához, ha fájlváltozást észlel a könyvtárban.

$ npm install express dotenv nodemon

Ezután hozzon létre egy app.js fájlt a projekt mappájában, amely az alkalmazás indexfájljaként fog szolgálni.

Most, hogy telepítettük az összes szükséges függőséget az Express alkalmazásunkhoz, be kell állítanunk a szkriptet az alkalmazás olvasásához a package.json fájlt. Ennek eléréséhez a package.json fájlt, így a scripts az objektum az alábbi képen látható:

"scripts": {
    "start": "nodemon app.js"
},

Alternatív megoldásként kihagyhatja a használatát nodemon, és használja node app.js helyette.

Express szerver beállítása

A szerver beállításához először be kell importálnunk a különböző csomagokat app.js. Létrehozunk továbbá a .env fájl a projektkönyvtárban – az alkalmazás összes környezeti változójának tárolásához:



const express = require('express')
require('dotenv').config

PORT=4000 

Meghatároztuk az alkalmazás portszámát .env, amelyet betölt és elolvas dotenv, és később is elérhető.

Az Express Server inicializálása

Most inicializálnunk kell az Express szervert, és rá kell kényszerítenünk az alkalmazásunkra, hogy figyeljen az alkalmazás portszámára, valamint egy tesztútvonal kérésére – /test. Frissítsünk app.js, az importálási utasítások alatt:


const app = express();
const port = process.env.PORT || 4000;

app.get("/test", async (req, res) => {
    return res.status(200).json({ success: true });
});

app.listen(port, () => {
    console.log(`Server is running at port ${port}`);
});

Innentől kezdve megtanuljuk, hogyan kezeljük az esetleges működési hibák különféle használati eseteit az Expressben.

A nem található hibák kezelése az Expressben

Tegyük fel, hogy le kell kérnie az összes felhasználót egy felhasználói adatbázisból, hatékonyan kezelheti a lehetséges hibaforgatókönyvet, ha nincs adat az adatbázisban, ha a logikát egy try/catch blokk – abban a reményben, hogy elkaphat minden olyan hibát, amely kivetülhet a catch Blokk:


const getUser = () => undefined;

app.get("/get-user", async (req, res) => {
	try {
		const user = getUser();
		if (!user) {
			throw new Error('User not found');
		}
	} catch (error) {
	    
		console.log(error); 
		
		res.status(400).send(error.message) 
	}
	return res.status(200).json({
		success: true
	});
});

Ennek eredményeként:

User not found

Most, amikor ez a kérés megtörténik (a Postman segítségével tesztelheti), és nincs felhasználó az adatbázisban, a kliens hibaüzenetet kap, amely szerint „A felhasználó nem található”. Azt is észre fogja venni, hogy a hiba a konzolban is naplózásra kerül.

A hibakezelés optimalizálása hibakezelő köztes szoftverrel

A fejlesztést úgy optimalizálhatjuk, hogy létrehozunk egy hibakezelő köztes szoftvert, amely az összes meghatározott útvonal végén jönne, így ha valamelyik útvonalban hiba történik, az Express automatikusan megnézi a következő köztes szoftvert, és folyamatosan lefelé halad a listán. amíg el nem éri a hibakezelőt. A hibakezelő feldolgozza a hibát, és választ is küld az ügyfélnek.

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

A kezdéshez hozzon létre egy mappát, melynek neve middleware a projektkönyvtárban és ebben a mappában hozzon létre egy fájlt errorHandler.js amely meghatározza a hibakezelőt:

const errorHandler = (error, req, res, next) => {
    
    console.log(error); 
    
    res.status(400).send(error.message); 
}
module.exports = errorHandler;

Köztesszoftver funkciónkban tudattuk az Expresszel, hogy ez nem egy alapvető köztes szoftver funkció, hanem egy hibakezelő, hozzáadva a error paraméter a 3 alapparaméter előtt.

Most a hibakezelőt fogjuk használni a bemutatónkban app.js és kezelje a felhasználók lekérésének kezdeti hibáját a hibakezelő köztes szoftverrel, az alábbiak szerint:


const getUser = () => undefined;

app.get("/get-user", async (req, res, next) => {
	try {
		const user = getUser();
		if (!user) {
			throw new Error("User not found");
		}
	} catch (error) {
		return next(error);
	}
});

app.use(errorHandler);

Még jobban optimalizálhatjuk kódunkat, ha absztrakciót hozunk létre a körül try/catch logika. Ezt úgy érhetjük el, hogy a projektkönyvtárban egy új mappát hozunk létre utils, és benne hozzon létre egy fájlt tryCatch.js.

Az elvonatkoztatáshoz a try-catch logika – definiálhatunk egy függvényt, amely elfogad egy másik függvényt (az úgynevezett ellenőr) paraméterként, és an async funkció, amely a try/catch bármely fogadott vezérlőhöz.

Ha hiba lép fel a vezérlőben, azt a vezérlő elkapja catch blokkot, és a következő függvény neve:


const tryCatch = (controller) => async (req, res, next) => {
	try {
		await controller(req, res);
	} catch (error) {
		return next(error);
	}
};
module.exports = tryCatch;

Aktivitáskövető try/catch absztrakciót, a kód kihagyásával újrafaktorizálhatjuk, hogy tömörebb legyen try-catch záradék kifejezetten a felhasználók lekérésekor a app.js:


const getUser = () => undefined;

app.get(
	"/get-user",
	tryCatch(async (req, res) => {
		const user = getUser();
		if (!user) {
			throw new Error("User not found");
		}
		res.status(400).send(error.message);
	})
);

Sikeresen absztraháltuk a try-catch logikát, és a kódunk továbbra is ugyanúgy működik, mint korábban.

Érvényesítési hibák kezelése Expressben

Ehhez a demóhoz létrehozunk egy új útvonalat az Express alkalmazásunkban a bejelentkezéshez – a felhasználói azonosító érvényesítéséhez bejelentkezéskor. Először telepítjük a joi csomag, amely segít egy séma létrehozásában, amellyel a követelményeket érvényesíthetjük:

$ npm i joi

Ezután hozzon létre egy sémát, amely a Joi.object val,-vel userId aminek számnak kell lennie, és kötelező – vagyis a kérésnek meg kell egyeznie egy felhasználói azonosítóval rendelkező objektummal.

Használhatjuk a validate() metódus a séma objektumban, hogy minden bemenetet érvényesítsen a sémával szemben:


const schema = Joi.object({
	userId: Joi.number().required(),
});

app.post(
	"/login",
	tryCatch(async (req, res) => {
		const {error, value} = schema.validate({});
		if (error) throw error;
	})
);

Ha egy üres objektumot adunk át a validate() módszerrel a hiba kecsesen kezelhető, és a hibaüzenet elküldésre kerül a kliensnek:

A konzolon is hozzáférünk a details tömb, amely különféle részleteket tartalmaz a hibáról, amelyeket szükség esetén közölni lehet a felhasználóval.

Az érvényesítési hibák specifikus kezeléséhez oly módon, hogy a megfelelő hibarészletet érvényesítési hibánként átadja, a hibakezelő köztes szoftvert át lehet alakítani:


const errorHandler = (error, req, res, next) => {
	console.log(error); 

	if (error.name === "ValidationError") {
		return res.status(400).send({
			type: "ValidationError",
			details: error.details,
		});
	}

	res.status(400).send(error.message); 
};

module.exports = errorHandler;

A errorHandler.js most testreszabott, amikor ugyanazt a kérést egy üres objektummal adjuk át a validate() eljárás:

Útmutató a kivételek kezeléséhez az Express PlatoBlockchain Data Intelligence rendszerben. Függőleges keresés. Ai.

Mostantól hozzáférünk egy testreszabott objektumhoz, amely olvashatóbb/barátságosabb módon küldi vissza az üzeneteket. Ily módon különböző típusú hibákat tudunk küldeni és kezelni a beérkező hiba típusától függően.

Következtetés

Ebben az útmutatóban az Express.js hibakezelésének minden aspektusát áttekintettük, beleértve a szinkron és aszinkron kódok alapértelmezés szerinti kezelését, a saját hibaosztályok létrehozását, az egyéni hibakezelési köztes szoftverek írását és biztosítását. next mint a végső fogáskezelő

Mint minden feladatnál, a fejlesztés során is vannak bevált gyakorlatok, amelyek magukban foglalják a hatékony hibakezelést, és ma megtanultuk, hogyan kezelhetjük robusztus módon a hibákat egy Express alkalmazásban.

A hibák megfelelő kezelése nem csak a fejlesztési idő csökkentését jelenti a hibák és hibák egyszerű megtalálásával, hanem egy robusztus kódbázis fejlesztését is jelenti nagyméretű alkalmazásokhoz. Ebben az útmutatóban láthattuk, hogyan állíthat be köztes szoftvert a működési hibák kezelésére. A hibakezelés javításának további módjai közé tartozik: a veremnyomok elküldésének mellőzése, a folyamatok kecses leállítása a fel nem fogott kivételek kezelése érdekében, megfelelő hibaüzenetek biztosítása, hibanaplók küldése és olyan osztály beállítása, amely kiterjeszti a Error osztály.

Remélem, hogy az oktatóanyagban használt példák élvezetesek voltak az Ön számára. Különféle forgatókönyvekkel foglalkoztam, amelyekkel találkozhat, amikor egy Express alkalmazást ír a valós világban a hibakezeléssel kapcsolatban. Kérem, jelezze, ha valamit kihagytam. Ez hasznunkra válik, és segít nekem is többet tanulni. További szép napot és köszönöm, hogy olvastál.

A cikkben használt összes forráskódra hivatkozhat GitHub.

További források

Időbélyeg:

Még több Stackabus