Att bli av med felhantering med NodeJS + Express

( Jaydipsinh Vaghela) (1 sep 2020)

Foto av Erik Mclean Unsplash

Felhantering i Javascript är lite lite av en smärta när du precis börjar. Idag ska jag förklara för dig hur man hanterar fel med NodeJS + Express och olika sätt att göra det.

Anledningen till att jag skriver den här artikeln är att när jag tar en intervju för en juniorroll, ställer normalt frågan om hur man hanterar en rutt som inte finns eller hur man hanterar felen när man skapar ett API med NodeJS? Många utvecklare kan inte svara på den här frågan. Så den här artikeln är speciellt för nybörjar- eller juniorutvecklare.

Vi ska använda NodeJS (v12.18. *), Express (v4.17. *) Och ESLint med Riktlinjer för kodning av Airbnb-kod . Jag har bifogat Github-länken som referens om du vill granska den.

Här är de saker vi kommer att täcka:

  • Förstå hur express definierar rutter och dess mappning
  • Skapa express middleware för att hantera API när ingen rutt finns
  • Förstå vad som händer om kod genererar slumpmässiga fel
  • Skapa express-mellanprogram för att hantera alla slags fel

Expressvägsmekanism & Ingen rutt finns mellanvara

Vi kan lägga till en rutt att uttrycka med metoden app.use() eller express.Router(). När vi använder den här metoden följer express den övre till nedre metoden för att lägga till listan över registrerade rutter. Så när vi ringer ett API börjar servern hitta den matchande rutten från topp till botten. Under denna process serverar den begäran med den första matchande rutten. Du kan skapa samma rutt flera gånger med express, men med den här metoden körs alltid den första rutten för att betjäna begäran.

Om någon försöker komma åt en API-slutpunkt som inte finns, får du ett oväntat fel från servern. För bästa praxis bör vi ta hand om denna typ av situation. Vi kan inte kasta ett oväntat fel till frontend om vi betraktar detta ur ett UX-perspektiv. För att hantera en sådan situation måste vi använda express-mellanvaran som kommer att ta hand om en ingen rutt existerar . Här är en exempelkod.

Ingen rutt finns mellanvara

Denna mellanvara måste vara det sista uttalandet i din ruttdefinitionskod. Alla andra rutter som definieras efter denna mellanvara kommer aldrig att köras, så positionen för denna mellanvara är mycket viktig. När express börjar leta efter en rutt och om den inte hittar några matchande rutter, kör express koden för denna mellanvara där vi kan vidta lämpliga åtgärder. I grund och botten svarar vi med ett korrekt felmeddelande i svaret så att frontend killen kan vidta lämpliga åtgärder på det.

Fel i affärslogik & hur man hanterar det

Användarupplevelse är nyckeln till framgång för alla webbapplikationer. Vi vill alltid ha användarinteraktion med en positiv känsla även med fel! Vi skriver massor av kod varje dag och det är inte möjligt att skriva koden utan fel. Speciellt när du är på juniornivå finns det större chans att ha fel. När vi hanterar express för API: t, om vår kod kraschar normalt, skickas hela felobjektet som svar på begäran, vilket inte är giltigt under några omständigheter. Vi måste hantera kodkrascher på ett sådant sätt så att vi kan skicka rätt felmeddelande till användaren. Här är koden som klipps ut för att lägga till mellanprogramvara för att hantera eventuella fel i express.

Felhantering mellanprogramvara

Med hjälp av detta returneras fel som genereras inom affärslogiken inuti felobjektet. Felobjektet innehåller hela stackspårningen om felet. Vi kan få status från svarsobjektet för att hantera informationen korrekt. Om ingen statuskod hittas returnerar vi standardstatuskoden 500, vilket innebär att något gick fel på servern. Det finns alltid ett meddelande i felspårningsobjektet i ett mänskligt läsbart format för att beskriva felet.

Jag vill lägga till lägg till några avancerade saker här när man överväger produktionsbyggnaden. Vi bör skicka en varning någonstans för att vidta lämpliga åtgärder för varje fel.Normalt föredrar jag att skicka en e-postvarning till utvecklargruppen eller så kan du använda felspårningsprogramvara som BugSnag för att spåra alla typer av saker.

Nedan finns ett kodavsnitt med fungerande kod så att du kan köra det lokalt och spela med det för att få en bättre förståelse. Du hittar också full kodåtkomst på repo med arbetskod.

GitHub Link: https://github.com/Jaydipsinhv/express-demo

Fullständig arbetskod med felhantering

Jag hoppas att den här artikeln hjälper juniorutvecklaren att få mer tydlighet med undantagshantering.