Opas poikkeusten käsittelyyn Express PlatoBlockchain Data Intelligencessa. Pystysuuntainen haku. Ai.

Opas poikkeusten käsittelyyn Expressissä

esittely

Poikkeuksia ja virheitä tapahtuu väistämättä, kun käyttäjät ovat vuorovaikutuksessa minkä tahansa sovelluksen kanssa. Ohjelmistoinsinöörien on valittava keino käsitellä mahdollisia virheitä – tietoisesti tai tietämättään. Tämän seurauksena taustakehittäjät, jotka rakentavat sovellusliittymiä Expressin avulla, joutuvat työskentelemään varmistaakseen, että he rakentavat hyödyllisen, tehokkaan ja käyttökelpoisen API:n. Tärkeintä on käsitellä virheitä siten, että rakennetaan kestävä järjestelmä, koska tämä auttaa vähentämään kehitysaikaa, suoria virheitä, tuottavuusongelmia ja määrää ohjelmistokehityksen onnistumisen tai skaalautuvuuden.

Tarvitseeko sinun kirjata virhesanoma, vaimentaa virhe, ilmoittaa käyttäjille virheestä tai kirjoittaa koodia virheiden käsittelemiseksi? Älä ihmettele enempää.

Tässä oppaassa opimme rakentamaan vankan virheiden käsittelyn koodikannan Express-sovelluksille, jotka auttavat havaitsemaan sovellusvirheet ja toteuttamaan optimaaliset toimet sovelluksen palauttamiseksi sulavasti epäonnistuneista ajon aikana.

Huomautus: Käytämme Postmania API:n testaamiseen demossamme. Voit ladata sen osoitteessa Postman lataussivu. Vaihtoehtoisesti voit käyttää selainta, komentoriviä curl työkalu tai jokin muu sinulle tuttu työkalu.

Mitä on virheiden käsittely?

Ohjelmistokehityksessä on kahdenlaisia ​​poikkeuksia: toiminta- ja ohjelmallinen.

  • Toimintahäiriöitä saattaa ilmetä ajon aikana, ja jotta sovellus ei katkea äkillisesti, meidän on käsiteltävä nämä poikkeukset sulavasti tehokkaiden virheenkäsittelymenetelmien avulla.
  • Ohjelmoija heittää ohjelmoitavat poikkeukset manuaalisesti, kun poikkeustila syntyy.

Voit ajatella toiminnallisia poikkeuksia "odottamattomina, mutta ennakoimattomina" poikkeuksina (kuten hakemiston käyttö rajojen ulkopuolella) ja ohjelmallisia poikkeuksia "odotettuina ja ennakoituina" poikkeuksina (kuten numeromuotoilupoikkeus).

Poikkeuskäsittely on menettely, jota käytetään ohjelman vikojen etsimiseen ja korjaamiseen. Virheenkäsittely lähettää viestejä, jotka sisältävät tapahtuneen virheen tyypin ja pinon, jossa virhe tapahtui.

Huomautus: Tietojenkäsittelytieteessä poikkeukset ovat palautettavissa, ja ne johtuvat tyypillisesti joko toiminnallisista tai ohjelmallisista ongelmista suorituksen aikana. Virheet syntyvät yleensä ulkoisista tekijöistä, kuten laitteistorajoituksista, yhteysongelmista, muistin puutteesta jne. JavaScriptissä termejä käytetään usein vaihtokelpoisina, ja mukautetut poikkeukset johdetaan Error luokassa. Error luokka itsessään edustaa sekä virheitä että poikkeuksia.

Expressissä poikkeusten käsittely viittaa siihen, kuinka Express määrittää itsensä sieppaamaan ja käsittelemään synkronisia ja asynkronisia poikkeuksia. Expressin poikkeuskäsittelyn hyvä puoli on, että kehittäjänä sinun ei tarvitse kirjoittaa omia poikkeuskäsittelijöitä. Expressin mukana tulee oletuspoikkeuskäsittelijä. Poikkeuskäsittelijä auttaa tunnistamaan virheet ja raportoimaan niistä käyttäjälle. Se tarjoaa myös erilaisia ​​korjausstrategioita ja toteuttaa niitä poikkeuksien lieventämiseksi.

Vaikka nämä saattavat vaikuttaa siltä, ​​että monet asiat menevät konepellin alle, poikkeusten käsittely Expressissä ei hidasta ohjelman yleistä prosessia tai keskeytä sen suorittamista.

Poikkeuskäsittelyn ymmärtäminen Expressissä

Expressin mukana tulevalla oletusvirhekäsittelijällä meillä on käsissämme joukko väliohjelmistotoimintoja, jotka auttavat havaitsemaan virheet automaattisesti reitinkäsittelijöissä. Luomme pian projektin teorian toteuttamiseksi käytännössä siitä, kuinka Express-sovelluksessa voidaan palauttaa oikeat virheet ja miten arkaluonteisia tietoja ei vuodata.

Väliohjelmistotoiminnon määrittäminen Expressissä

Virheenkäsittelyn väliohjelmistotoiminnot on määritelty siten, että ne hyväksyvät an Error objekti ensimmäisenä syöttöparametrina, jonka jälkeen minkä tahansa muun väliohjelmistotoiminnon oletusparametrit: request, responseja next. next() -toiminto ohittaa kaikki nykyiset väliohjelmistot reitittimen seuraavaan virheenkäsittelyohjelmaan.

Virheenkäsittelyn määrittäminen Expressissä

Suorita seuraava komento päätteessäsi luodaksesi Node and Express -sovelluksen:

$ mkdir error-handling-express

Alustetaan uusi Node-projekti äskettäin luodussa kansiossa:

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

Tämä luo a package.json tiedosto kansiossamme.

Express-palvelimen luomiseksi Node-sovelluksessamme meidän on asennettava express paketti, dotenv ympäristömuuttujien automaattista lataamista varten .env tiedosto process.env esine ja nodemon solmusovelluksen uudelleenkäynnistämiseksi, jos tiedostomuutos havaitaan hakemistossa.

$ npm install express dotenv nodemon

Luo seuraavaksi an app.js tiedosto projektikansioon, joka toimii sovelluksen hakemistotiedostona.

Nyt kun olemme asentaneet kaikki tarvittavat riippuvuudet Express-sovelluksellemme, meidän on määritettävä komentosarja sovelluksen lukemista varten package.json tiedosto. Sen saavuttamiseksi package.json tiedosto, jotta scripts objekti on alla olevan kuvan mukainen:

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

Vaihtoehtoisesti voit ohittaa käytön nodemon, ja käytä node app.js sen sijaan.

Express-palvelimen määrittäminen

Palvelimen määrittämistä varten meidän on ensin tuotava eri paketit sisään app.js. Luomme myös a .env tiedosto projektihakemistossa – tallentaaksesi kaikki sovelluksen ympäristömuuttujat:



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

PORT=4000 

Olemme määrittäneet sovelluksen porttinumeron .env, jonka lataa ja lukee dotenv, ja niitä voi käyttää myöhemmin.

Express-palvelimen alustus

Nyt meidän on alustettava Express-palvelin ja saatava sovelluksemme kuuntelemaan sovelluksen porttinumeroa sekä pyyntö testireitille - /test. Päivitellään app.js, tuontilausekkeiden alla:


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}`);
});

Tästä eteenpäin opimme käsittelemään erilaisia ​​käyttötapauksia, joissa voidaan kohdata toimintavirheitä Expressissä.

Ei löydy -virheiden käsittely Expressissä

Oletetaan, että sinun on noudettava kaikki käyttäjät käyttäjätietokannasta, voit käsitellä tehokkaasti mahdollisen virhetilanteen, jossa tietokannassa ei ole tietoja, käärimällä logiikan try/catch lohko – toivoen saavansa kiinni mahdollisista virheistä catch lohko:


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
	});
});

Tämä johtaa:

User not found

Nyt kun tämä pyyntö tehdään (voit testata Postmanilla) eikä tietokannassa ole yhtään käyttäjää, asiakas saa virheilmoituksen "Käyttäjää ei löydy". Huomaat myös, että virhe kirjataan myös konsoliin.

Virheenkäsittelyn optimointi virheiden käsittelyn väliohjelmistolla

Voimme optimoida kehityksen luomalla virheenkäsittelijän väliohjelmiston, joka tulee kaikkien määritettyjen reittien loppuun, jolloin jos jollekin reitille tulee virhe, Express näkee automaattisesti seuraavan väliohjelmiston ja jatkaa listaa alaspäin. kunnes se saavuttaa virheenkäsittelijän. Virheenkäsittelijä käsittelee virheen ja lähettää myös vastauksen takaisin asiakkaalle.

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Aloita luomalla kansio nimeltä middleware luo projektihakemistoon ja tähän kansioon tiedosto nimeltä errorHandler.js joka määrittää virheenkäsittelijän:

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

Väliohjelmistotoiminnossamme olemme ilmoittaneet Expressille, että tämä ei ole väliohjelmiston perustoiminto, vaan virhekäsittelijä, lisäämällä error parametri ennen kolmea perusparametria.

Nyt käytämme virheenkäsittelijää esittelyssämme app.js ja käsittelemään alkuperäisen virheen haettaessa käyttäjiä virheenkäsittelyn väliohjelmistolla, kuten alla on esitetty:


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);

Voimme optimoida koodiamme entistä enemmän luomalla abstraktin ympärille try/catch logiikka. Voimme saavuttaa tämän luomalla uuden kansion projektihakemistoon nimeltä utils, ja luo siihen tiedosto nimeltä tryCatch.js.

Abstrahoidaksesi try-catch logiikka – voimme määrittää funktion, joka hyväksyy toisen funktion (tunnetaan nimellä ohjain) parametrinaan ja palauttaa an async toiminto, joka pitää sisällään a try/catch mille tahansa vastaanotetulle ohjaimelle.

Jos ohjaimessa tapahtuu virhe, se jää kiinni catch lohko ja seuraava funktio on nimeltään:


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

Kanssa try/catch abstraktio, voimme muuttaa koodimme ytimekkäämmäksi jättämällä väliin try-catch lauseke nimenomaisesti haettaessa käyttäjiä 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);
	})
);

Olemme onnistuneesti poistaneet try-catch-logiikan ja koodimme toimii edelleen kuten ennen.

Vahvistusvirheiden käsittely Expressissä

Tätä demoa varten luomme Express-sovelluksessamme uuden reitin kirjautumiseen – käyttäjätunnuksen vahvistamiseksi sisäänkirjautumisen yhteydessä. Ensin asennamme joi paketti, joka auttaa luomaan skeeman, jonka avulla voimme valvoa vaatimuksia:

$ npm i joi

Luo seuraavaksi skeema, joka on a Joi.object kanssa userId jonka on oltava numero ja se on pakollinen – eli pyynnön on vastattava objektia, jossa on käyttäjätunnus.

Voimme käyttää validate() menetelmä skeemaobjektissa jokaisen syötteen tarkistamiseksi skeemaa vastaan:


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

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

Jos tyhjä objekti siirretään sisään validate() -menetelmällä, virhe käsitellään sulavasti ja virheviesti lähetetään asiakkaalle:

Konsolissa saamme myös pääsyn a details taulukko, joka sisältää erilaisia ​​virheen yksityiskohtia, jotka voidaan tarvittaessa ilmoittaa käyttäjälle.

Jotta validointivirheet voidaan käsitellä erityisesti siten, että asianmukainen virhetieto välitetään validointivirhettä kohti, virheenkäsittelijän väliohjelmisto voidaan muuttaa uudelleen:


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;

Kanssa errorHandler.js nyt räätälöitynä, kun teemme saman pyynnön tyhjällä objektilla, joka välitetään validate() menetelmä:

Opas poikkeusten käsittelyyn Express PlatoBlockchain Data Intelligencessa. Pystysuuntainen haku. Ai.

Meillä on nyt pääsy räätälöityyn objektiin, joka palauttaa viestit luettavammalla/ystävällisemmällä tavalla. Näin pystymme lähettämään ja käsittelemään erilaisia ​​virheitä sisääntulevan virhetyypin mukaan.

Yhteenveto

Tässä oppaassa kävimme läpi kaikki Express.js:n virheenkäsittelyn osa-alueet, mukaan lukien kuinka synkronista ja asynkronista koodia käsitellään oletusarvoisesti, miten voit luoda omia virheluokkia, kirjoittaa mukautettuja virheenkäsittelyn väliohjelmistotoimintoja ja tarjota next viimeisenä saaliskäsittelijänä

Kuten jokaisessa tehtävässä, kehitysvaiheessa on myös parhaita käytäntöjä, joihin kuuluu tehokas virheiden käsittely, ja tänään olemme oppineet, kuinka voimme käsitellä Express-sovelluksen virheitä vankalla tavalla.

Virheiden asianmukainen käsittely ei tarkoita vain kehitysajan lyhentämistä bugien ja virheiden löytämisellä, vaan myös vankan koodikannan kehittämistä suuria sovelluksia varten. Tässä oppaassa olemme nähneet, kuinka väliohjelmisto asetetaan toimintavirheiden käsittelyä varten. Joitakin muita tapoja parantaa virheiden käsittelyä ovat: pinojälkien lähettämättä jättäminen, prosessien sulattaminen käsittelemättä havaitsemattomia poikkeuksia, asianmukaisten virheilmoitusten lähettäminen, virhelokien lähettäminen ja luokan määrittäminen, joka laajentaa Error luokka.

Toivon, että tässä opetusohjelmassa käyttämäni esimerkit olivat sinulle miellyttäviä. Käsittelin erilaisia ​​skenaarioita, joita saatat kohdata kirjoittaessasi Express-sovellusta käytettäväksi todellisessa maailmassa virheenhallinnasta. Ole hyvä ja kerro minulle, jos minulta jäi jotain paitsi. Se hyödyttää meitä ja auttaa minua myös oppimaan lisää. Hyvää päivää ja kiitos kun luit.

Voit viitata kaikkiin artikkelissa käytettyyn lähdekoodiin Github.

Lisäresurssit

Aikaleima:

Lisää aiheesta Stackabus