Detaillierte Erklärung, wie Angular mit unerwarteten Ausnahmefehlern umgeht

Detaillierte Erklärung, wie Angular mit unerwarteten Ausnahmefehlern umgeht

Vorne geschrieben

Unabhängig davon, wie gut der Code geschrieben ist, ist es unmöglich, alle möglichen Ausnahmen vollständig zu behandeln. Dies gilt insbesondere für Anwendungen in Produktionsumgebungen, in denen ein großer Teil der Daten von Benutzern und Remotestandorten stammt und es schwierig ist, sicherzustellen, dass alle Daten wie vom Programm angegeben generiert werden. Tatsächlich gibt es keine Möglichkeit, davon zu erfahren, es sei denn, es wird von einem Tester entdeckt oder von einem Kunden gemeldet. Daher ist es sehr wichtig, die von der Anwendung generierten unbekannten Ausnahmen zu melden.

Angular bietet standardmäßig auch eine globale Ausnahmeverwaltung. Wenn eine Ausnahme auftritt, wird sie an die Konsole gesendet. Wenn Sie NG-ZORRO verwenden, werden Sie häufig auf Ausnahmemeldungen stoßen, dass ICON nicht geladen ist. Dies ist auch eine Art von Ausnahmemeldung:

core.js:5980 FEHLER Fehler: [@ant-design/icons-angular]:das Symbol „setting-o“ existiert nicht oder ist nicht registriert.
 bei IconNotFoundError (ant-design-icons-angular.js:94)
 bei MapSubscriber.project (ant-design-icons-angular.js:222)
 bei MapSubscriber._next (map.js:29)
 bei MapSubscriber.next (Subscriber.js:49)
 bei RefCountSubscriber._next (Subscriber.js:72)
 bei RefCountSubscriber.next (Subscriber.js:49)
 bei Subject.next (Subject.js:39)
 bei ConnectableSubscriber._next (Subscriber.js:72)
 bei ConnectableSubscriber.next (Subscriber.js:49)
 bei CatchSubscriber.notifyNext (innerSubscribe.js:42)

Angular verwaltet Ausnahmemeldungen einheitlich über ErrorHandler und Sie müssen nur die Methode handleError überschreiben und die Ausnahmemeldung erneut verarbeiten.

Fehlerhandler

Erstellen Sie zunächst eine Datei custom-error-handler.ts:

importiere { ErrorHandler, Injectable } von '@angular/core';

@Injizierbar()
exportiere Klasse CustomErrorHandler erweitert ErrorHandler {
 handleError(Fehler: beliebig): void {
 super.handleError(Fehler);
 }
}

CustomErrorHandler kann die aktuellen Benutzerdaten, das aktuelle Ausnahmemeldungsobjekt usw. vollständig abrufen und die Berichterstellung an das Backend über HttpClient ermöglichen.

Nachfolgend finden Sie die Dokumentationsseite von NG-ALAIN. Da zur Analyse Google Analytics verwendet wird, müssen wir die Ausnahmemeldung nur an onerror weiterleiten:

importiere { DOKUMENT } von '@angular/common';
importiere { ErrorHandler, Inject, Injectable } von '@angular/core';

@Injizierbar()
exportiere Klasse CustomErrorHandler erweitert ErrorHandler {
 Konstruktor(@Inject(DOKUMENT) privates Dokument: beliebig) {
 super();
 }

 handleError(Fehler: beliebig): void {
 versuchen {
  super.handleError(Fehler);
 } fangen (e) {
  dies.reportError(e);
 }
 dies.reportError(Fehler);
 }

 privater Fehlerbericht(Fehler: Zeichenfolge | Fehler): void {
 const win = this.doc.defaultView als beliebig;
 wenn (gewinnen && gewinnen.beiFehler) {
  wenn (Fehlertyp === 'Zeichenfolge') {
  win.onerror(Fehler);
  } anders {
  win.onerror(Fehlernachricht, undefiniert, undefiniert, undefiniert, Fehler);
  }
 }
 }
}

Registrieren Sie abschließend den CustomErrorHandler im AppModule:

@NgModule({
 Anbieter:
  { bereitstellen: ErrorHandler, verwendenKlasse: CustomErrorHandler },
 ]
})
exportiere Klasse AppModule { }

abschließend

Tatsächlich gibt es noch eine weitere sehr wichtige Aufgabe. Die Dateien in der Produktionsumgebung werden verpackt und komprimiert. Mit anderen Worten, die generierte Ausnahmemeldung kann nicht mit der tatsächlichen Anzahl der Codezeilen übereinstimmen. Dies erfordert die Unterstützung von SourceMap. Natürlich wird die normale Produktionsumgebung diese Datei nicht veröffentlichen. Wenn Sie also die richtige Anzahl von Zeilen und Spalten erhalten möchten, müssen Sie dennoch eine Zwischenebene verwenden und das Source-Map-Modul im Backend verwenden, um die tatsächlichen Zeilen- und Spaltenwerte zu analysieren.

Mithilfe des Dependency-Injection-Systems (DI) von Angular können wir einige in Angular integrierte Module schnell ersetzen und so einige spezielle Anforderungen schnell lösen, ohne die Geschäftsebene zu ändern.

Zusammenfassen

Dies ist das Ende dieses Artikels darüber, wie Angular unerwartete Ausnahmefehler behandelt. Weitere Informationen dazu, wie Angular unerwartete Ausnahmefehler behandelt, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Verwenden von Raygun zum automatischen Verfolgen von Ausnahmen in AngularJS

<<:  React-native-Beispielcode zur Implementierung des Schiebelöscheffekts des Einkaufswagens

>>:  Detaillierte Erläuterung der Wissenspunkte zur asynchronen Programmierung in nodejs

Artikel empfehlen

Tutorial zur Installation von MySQL 5.7.18 unter Windows 10

In diesem Tutorial erfahren Sie alles über die In...

Lebenszyklus und Hook-Funktionen in Vue

Inhaltsverzeichnis 1. Was ist der Lebenszyklus 2....

So installieren und verwenden Sie Server-U Version 14

Einführung der Server-U-Software Server-U ist ein...

JavaScript zum dynamischen Laden und Löschen von Tabellen

In diesem Artikel wird der spezifische JavaScript...

So erstellen Sie einen Nginx-Server mit Docker

Betriebsumgebung: MAC Docker-Version: Docker vers...

JS realisiert Video-Sperreffekt

Verwenden Sie um dies zu erreichen, die modulare ...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.15

In diesem Artikel wird die Installations- und Kon...

Detaillierte Analyse des MySQL Master-Slave-Verzögerungsphänomens und -prinzips

1. Phänomen Am frühen Morgen wurde einer Online-T...

Was tun, wenn Sie Ihr MySQL-Passwort vergessen?

Lösung zum Vergessen des MySQL-Passworts: [root@l...

LINUX Prüft, ob der Port belegt ist

Ich konnte nie herausfinden, ob der Port belegt i...

DIV-Hintergrund, halbtransparenter Text, nicht durchscheinender Stil

Der DIV-Hintergrund ist halbtransparent, aber die ...