Úvod do zpracování chyb v Angularu 7: 1. část – Angular errorHandler

V tomto tutoriálu se seznámíte s chybami v JavaScriptu, s konceptem try-catch a jeho použitím a s malým úvodem do zpracování interních chyb pomocí Angular errorHandler.

Chyby

Jedna z mých oblíbených filmových hvězd, Samuel L. Jackson, byla úplně první osobou, od které jsem slyšel větu „chybovat je lidské“, a i když si teď nemohu vzpomenout na název konkrétního filmu, můžete se mnou souhlasit, že s chybami při psaní kódu je to stejné. Jako vývojáři Angularu už víte, že chyby mohou být způsobeny osobními chybami, například tím, že v Angularu 7 máte příkaz import s názvem přípony souboru a ten se vám zobrazí v prohlížeči, pokud ho nezachytíte.

 import { DataService } from 'src/app/services/data.service.ts';

Chyby mohou vzniknout z nedostatku testování, komunikace se serverem nebo dokonce z nejednoznačnosti projektu Angular, na kterém pracujete. Jsme lidé, a tak jsme náchylní k chybám, to je jeden z důvodů, proč dobrý editor, jako je VS Code, vždy nakreslí pískavé čáry, když začnete vykolejovat.

Předpoklady

Abyste mohli postupovat podle ukázky v tomto článku, měli byste mít:

  • Node verze 11.0 nainstalovaný na vašem počítači.
  • Správce balíčků Node verze 6.7 (obvykle se dodává s instalací Node).
  • Angular CLI verze 7.0
  • Nejnovější verze Angularu (verze 7)
 // run the command in a terminal ng version

Ověřte si, že používáte verzi 7, a pokud ne, aktualizujte ji na 7. Další věci, které bude dobré mít, jsou:

  • Pracovní znalost frameworku Angular na úrovni začátečníka.
  • Znalost služeb Angular bude výhodou, ale ne podmínkou.

Typy chyb

Existuje mnoho typů chyb, ale budu je rozdělovat do dvou hlavních kategorií: vnitřní a vnější chyby.

  • Vnitřní chyby: (známé také jako chyby na straně klienta) Jsou to ty, za které můžete být zodpovědní, chyby syntaxe, chyby správce balíčků, referenční chyby, typové chyby a všechny typy chyb na straně klienta, které může opravit vývojář v rámci aplikace Angular.
  • Chyby na straně klienta: (známé také jako chyby na straně serveru) Tyto chyby mohou sahat od chyb serveru, které většinou přicházejí s třímístnými stavovými kódy jako 500, přes chyby internetové sítě až dokonce po chyby specifické pro prohlížeč. Jedná se v podstatě o chyby, které jsou mimo dosah aplikace Angular, proto název outsider.

Tento článek se zaměří na chyby insider a následný článek se pak bude věnovat chybám outsider.

Baby steps: throw a catch!“

Při spuštění funkce v JavaScriptu se tato funkce zařadí do jakési fronty provádění funkcí a jakmile se aplikace spustí a dostane se na řadu, frontu opustí a provede se. Pokud tedy dojde k chybě, JavaScript vyhodí výjimku, která okamžitě odstraní všechny operace ve frontě, dokud není výjimka vyřízena. Na základní úrovni se výjimky ošetřují pomocí try/catch bloků, celá aplikace spadne, pokud kompilátor tento try/catch blok nevidí. Syntaxe try/catch vypadá takto:

Užitečnost uvidíte v malé ukázce. Vytvořte pomocí CLI nový projekt Angular, nazvěte jej ngapp

 ng new ngapp

Přijměte nastavení směrovače a jako stylový list zvolte prosté CSS. Přejděte do souboru app.component.ts a zkopírujte do něj níže uvedený kód:

Zkopírujte je do app.component.html

 <!-- src/app/app.component.html --> <button (click)="normalError()"> Fire Normal Error </button>

Poté zkopírujte tyto základní styly do app.component.css

Spusťte aplikaci ve vývoji takto:

 ng serve

V některých případech se ji nepodaří zkompilovat, když se to stane, spusťte ji znovu a zkompiluje se.

To se projeví v konzoli a většinou se celá aplikace okamžitě přeruší, jak vidíte, hlášení, které jsme zaznamenali, se nezobrazilo. Blok try/catch si s těmito výjimkami elegantně poradí a aplikace běží dál. Pokud jste tedy tentokrát měli další tlačítko s try catch blokem, můžete si všimnout rozdílu. Zkopírujte to do souboru app.component.html file :

Následující kód zkopírujte do souboru app.component.ts:

Kód vyznačený tučně zobrazuje stejnou chybovou instanci reference, ale tentokrát je zabalena do bloku try-catch, takže může být elegantně zpracována. Když aplikaci spustíte znovu, měla by vypadat takto:

Omezení try/catch

Jakkoli je try/catch skvělý, při přemýšlení o aplikaci už vidíte, jak není udržitelný. Je to proto, že se nemůžete pustit do přidávání těchto try/catch bloků do každé funkce v aplikaci, to není efektivní z hlediska zdrojů. Dobrou zprávou je, že Angular má jakýsi globální try/catch, který můžeme použít na jednom centralizovaném místě pro zachycení všech výjimek.

Obsluha chyb

Angular má globální třídu pro obsluhu chyb s názvem errorHandler, která poskytuje háček pro centralizovanou obsluhu výjimek uvnitř vaší aplikace. V podstatě zachytí všechny chyby, které se ve vaší aplikaci vyskytnou, a všechny je zaznamená do konzole a zabrání pádu aplikace (to byl důvod, proč vaše první tlačítko aplikaci neshodilo). syntaxe vypadá takto:

Tato funkce nám umožňuje upravit výchozí chování zaznamenávání chyb do konzole podle naší vlastní logiky poté, co jsme ji přidali do seznamu poskytovatelů v našem modulu aplikace. Přejděte do souboru app.component.ts a zkopírujte do něj níže uvedený kód:

Blok try catch byl odstraněn, takže byste měli mít v editoru kódu dva pískavé řádky (nebo problémy) označující dvě chyby odkazu. Chcete-li nyní otestovat globální obsluhu chyb systému Angular, přejděte do souboru app.module.ts a zkopírujte níže uvedený kód:

Změny provedené stejně jako syntaxe naznačují, že jsme vytvořili třídu globální obsluhy chyb, která implementuje obsluhu chyb systému Angular, a poté ji zaregistrovali v sekci provider. naše logika jednoduše kontroluje chyby a u každé nalezené chyby zaznamená zprávu. Pokud toto uložíte a aplikaci spustíte, uvidíte v konzoli texty zaznamenané u každé chyby a aplikace bude fungovat stejně, jako by šlo o try-catch.

Služba chyb

Nyní vidíte, že veškerá naše chybová logika je uvnitř modulu jádra aplikace, což není způsob, kterým nás Angular vybízí k psaní kódu. Takže v souladu s tím, aby vše bylo modulární, použijeme službu. nazveme ji chybová služba a veškerá logika, jak ošetřit chyby, bude uložena v ní. Nejprve si pomocí CLI vygenerujte službu Angular:

 ng generate service error

nebo

 ng g s error

Poté musíte ze svého souboru app.module.ts odstranit logiku obsluhy chyb, takže bude vypadat takto:

Poté pomocí CLI vygenerujte chybovou komponentu, kam může být uživatel přesměrován, pokud dojde k chybě.

 ng g c error

Teď už máte chybovou komponentu, kterou nemusíte nijak upravovat, přejděte do souboru error.service.ts a zkopírujte do něj níže uvedený kód:

Tady je logika trochu upravena, aby nejprve zkontrolovala, o jaký druh chyby se jedná, pokud se jedná o vnitřní chybu, pak uživatele naviguje na chybovou stránku, jakmile k chybě dojde. Ujistěte se tedy, že váš soubor app-routing.module.ts je aktualizován o trasu takto:

Nakonec by váš soubor app.component.html měl vypadat takto:

Pokud jste postupovali podle příspěvku až sem, můžete aplikaci znovu spustit ve vývoji, vaše chyby budou elegantně zpracovány podle očekávání.

Závěr

Byli jste seznámeni s chybami a koncepcí jejich zpracování v systému Angular pomocí třídy errorHandler se zaměřením na chyby JavaScriptu na straně klienta. V příštím tutoriálu se budeme hlouběji věnovat chybám outsiderů, interceptorům HTTP a sledování chyb pomocí vzdálené služby, přičemž budeme vycházet ze všech konceptů, které jste se naučili v tomto příspěvku. Kompletní kód tohoto tutoriálu je na GitHubu a najdete jej zde.

Napsat komentář