0 Tage Serie
javascript / intermediate
Snippet

Erfassen unbehandelter Anwendungsfehler mit einem benutzerdefinierten globalen ErrorHandler

Angular stellt einen zentralen ErrorHandler-Hook bereit, der alle unbehandelten Ausnahmen aus Templates, Services und Lifecycle-Hooks empfängt. Durch die Implementierung der ErrorHandler-Klasse und eine differenzierte Kontrollfluss-Verzweigung anhand der Fehlertypen (z. B. Unterscheidung zwischen Netzwerkfehlern und regulären JavaScript-Error-Objekten) können Diagnosedaten strukturiert an externe Monitoring-Tools übermittelt werden.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { ErrorHandler, Injectable, inject } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';
import { LoggingService } from './logging.service';
@Injectable()
export class GlobalApplicationErrorHandler implements ErrorHandler {
private readonly logger = inject(LoggingService);
public handleError(error: unknown): void {
if (error instanceof HttpErrorResponse) {
this.logger.logHttpFailure(`Status: ${error.status} - ${error.message}`);
return;
}
if (error instanceof Error) {
this.logger.logFatalCrash({
name: error.name,
message: error.message,
stack: error.stack ?? 'No stack trace available'
});
return;
}
this.logger.logUnknown(String(error));
}
}
angular
Erklärung
1
export class GlobalApplicationErrorHandler implements ErrorHandler {
Deklariert eine Klasse, die das ErrorHandler-Interface von Angular implementiert, um das Standard-Fehlerverhalten zu überschreiben.
2
public handleError(error: unknown): void {
Definiert die erforderliche Einstiegsmethode, die vom Angular-Framework bei jeder unbehandelten Ausnahme aufgerufen wird.
3
if (error instanceof HttpErrorResponse) {
Nutzt Type-Narrowing zur Überprüfung, ob der Fehler aus einer nicht abgefangenen HTTP-Anfrage stammt.
4
if (error instanceof Error) {
Verzweigt den Ablauf für Standard-JavaScript-Error-Instanzen, um sicher auf Nachricht und Stacktrace zuzugreifen.