


Lassen Sie uns über häufig verwendete Fehlerbehandlungsmethoden in Angular sprechen
Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis der häufig verwendeten Fehlerbehandlungsmethoden in Angular. Ich hoffe, dass er für alle hilfreich ist!
Fehlerbehandlung ist eine Anforderung, die beim Schreiben von Code häufig auftritt und häufig behandelt werden muss, um Programmabstürze zu vermeiden. In diesem Artikel wird kurz die Methode Angular
vorgestellt behandelt Ausnahmen. [Verwandte Tutorial-Empfehlungen: „Angular
处理异常的方式。【相关教程推荐:《angular教程》】
什么是Angular
Angualr
是一款来自谷歌的开源的 web 前端框架,诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。
AngularJS 是基于声明式编程模式 是用户可以基于业务逻辑进行开发. 该框架基于HTML的内容填充并做了双向数据绑定从而完成了自动数据同步机制. 最后, AngularJS 强化的DOM操作增强了可测试性.
try/catch
最熟悉的的方式,就是在代码中添加try/catch
块,在try
中发生错误,就会被捕获并且让脚本继续执行。然而,随着应用程序规模的扩大,这种方式将变得无法管理。
ErrorHandler
Angular
提供了一个默认的ErrorHandler
,可以将错误消息打印到控制台,因此可以拦截这个默认行为来添加自定义的处理逻辑,下面尝试编写错误处理类:
import { ErrorHandler, Injectable } from "@angular/core"; import { HttpErrorResponse } from "@angular/common/http"; @Injectable() export class ErrorsHandler implements ErrorHandler { handleError(error: Error | HttpErrorResponse) { if (!navigator.onLine) { console.error("Browser Offline!"); } else { if (error instanceof HttpErrorResponse) { if (!navigator.onLine) { console.error("Browser Offline!"); } else { // Handle Http Error (4xx, 5xx, ect.) console.error("Http Error!"); } } else { // Handle Client Error (Angular Error, ReferenceError...) console.error("Client Error!"); } console.error(error); } } }
通常在
app
下创建一个共享目录shared
,并将此文件放在providers
文件夹中
现在,需要更改应用程序的默认行为,以使用我们自定义的类而不是ErrorHandler
。修改app.module.ts
文件,从@angular/core
导入ErrorHandler
,并将providers
添加到@NgModule
模块,代码如下:
import { NgModule, ErrorHandler } from "@angular/core"; import { BrowserModule } from "@angular/platform-browser"; import { FormsModule } from "@angular/forms"; // Providers import { ErrorsHandler } from "./shared/providers/error-handler"; import { AppComponent } from "./app.component"; @NgModule({ imports: [BrowserModule, FormsModule], declarations: [AppComponent], providers: [{ provide: ErrorHandler, useClass: ErrorsHandler }], bootstrap: [AppComponent] }) export class AppModule {}
HttpInterceptor
HttpInterceptor
提供了一种拦截HTTP请求/响应的方法,就可以在传递它们之前处理。例如,可以在抛出错误之前重试几次HTTP请求。这样,就可以优雅地处理超时,而不必抛出错误。
还可以在抛出错误之前检查错误的状态,使用拦截器,可以检查401状态错误码,将用户重定向到登录页面。
import { Injectable } from "@angular/core"; import { HttpEvent, HttpRequest, HttpHandler, HttpInterceptor, HttpErrorResponse } from "@angular/common/http"; import { Observable, throwError } from "rxjs"; import { retry, catchError } from "rxjs/operators"; @Injectable() export class HttpsInterceptor implements HttpInterceptor { intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { return next.handle(request).pipe( retry(1), catchError((error: HttpErrorResponse) => { if (error.status === 401) { // 跳转到登录页面 } else { return throwError(error); } }) ); } }
同样需要添加到app.module.ts
中
import { NgModule, ErrorHandler } from "@angular/core"; import { HTTP_INTERCEPTORS } from "@angular/common/http"; import { BrowserModule } from "@angular/platform-browser"; import { FormsModule } from "@angular/forms"; // Providers import { ErrorsHandler } from "./shared/providers/error-handler"; import { HttpsInterceptor } from "./shared/providers/http-interceptor"; import { AppComponent } from "./app.component"; @NgModule({ imports: [BrowserModule, FormsModule], declarations: [AppComponent], providers: [ { provide: ErrorHandler, useClass: ErrorsHandler }, { provide: HTTP_INTERCEPTORS, useClass: HttpsInterceptor, multi: true } ], bootstrap: [AppComponent] }) export class AppModule {}
多提供者用于创建可扩展服务,其中系统带有一些默认提供者,也可以注册其他提供者。默认提供程序和其他提供程序的组合将用于驱动系统的行为。
Notifications
在控制台打印错误日志对于开发者来说非常友好,但是对于用户来说则需要一种更加友好的方式来告诉这些错误何时从GUI中发生。根据错误类型,推荐两个组件:Snackbar
和Dialog
Snackbar
:推荐用于简单的提示,比如表单缺少必填字段或通知用户可预见的错误(无效电子邮件、用户名太长等)。Dialog
:当存在未知的服务器端或客户端错误时,推荐使用这种方式;通过这种方式,可以显示更多的描述,甚至call-to-action
,比如允许用户输入他们的电子邮件来跟踪错误。
在shared
文件夹中添加一个服务来处理所有通知,新建services
文件夹,创建文件:notification.service.ts
,代码如下:
import { Injectable } from "@angular/core"; import { MatSnackBar } from "@angular/material/snack-bar"; @Injectable({ providedIn: "root" }) export class NotificationService { constructor(public snackBar: MatSnackBar) {} showError(message: string) { this.snackBar.open(message, "Close", { panelClass: ["error"] }); } }
更新error-handler.ts
,添加NotificationService
:
import { ErrorHandler, Injectable, Injector } from "@angular/core"; import { HttpErrorResponse } from "@angular/common/http"; // Services import { NotificationService } from "../services/notification.service"; @Injectable() export class ErrorsHandler implements ErrorHandler { //Error handling需要先加载,使用Injector手动注入服务 constructor(private injector: Injector) {} handleError(error: Error | HttpErrorResponse) { const notifier = this.injector.get(NotificationService); if (!navigator.onLine) { //console.error("Browser Offline!"); notifier.showError("Browser Offline!"); } else { if (error instanceof HttpErrorResponse) { if (!navigator.onLine) { //console.error("Browser Offline!"); notifier.showError(error.message); } else { // Handle Http Error (4xx, 5xx, ect.) // console.error("Http Error!"); notifier.showError("Http Error: " + error.message); } } else { // Handle Client Error (Angular Error, ReferenceError...) // console.error("Client Error!"); notifier.showError(error.message); } console.error(error); } } }
如果在一个组件中抛出一个错误,可以看到一个很好的snackbar
消息:
日志和错误跟踪
当然不能期望用户向报告每个bug
,一旦部署到生产环境中,就不能看到任何控制台日志。因此就需要能够记录错误的后端服务与自定义逻辑写入数据库或使用现有的解决方案,如Rollbar
、Sentry
、Bugsnag
。
接下来创建一个简单的错误跟踪服务,创建logging.service.ts
:
import { Injectable } from "@angular/core"; import { HttpErrorResponse } from "@angular/common/http"; @Injectable({ providedIn: "root" }) export class LoggingService { constructor() {} logError(error: Error | HttpErrorResponse) { // This will be replaced with logging to either Rollbar, Sentry, Bugsnag, ect. if (error instanceof HttpErrorResponse) { console.error(error); } else { console.error(error); } } }
将服务添加到error-handler.ts
Angular Tutorial
Was ist Angular
Angualr
ist ein Dieses Open-Source-Web-Frontend-Framework von Google wurde 2009 geboren. Es wurde von Misko Hevery und anderen erstellt und später von Google übernommen. Es handelt sich um ein hervorragendes Front-End-JS-Framework, das in vielen Google-Produkten verwendet wurde. 🎜🎜AngularJS basiert auf einem deklarativen Programmiermodell, das es Benutzern ermöglicht, basierend auf Geschäftslogik zu entwickeln. Das Framework basiert auf HTML-Inhaltsfüllung und bidirektionaler Datenbindung, um einen automatischen Datensynchronisierungsmechanismus zu vervollständigen Operationen Verbesserte Testbarkeit.🎜
try/catch
🎜Der bekannteste Weg ist das Hinzufügen von < code>try/catch< /code>-Block: Wenn intry
ein Fehler auftritt, wird dieser abgefangen und das Skript wird weiter ausgeführt. Mit zunehmender Größe der Anwendung wird dieser Ansatz jedoch unüberschaubar. 🎜ErrorHandler
🎜Angular
stellt einen Standard-ErrorHandler
bereit, der der Fehler sein kann Die Meldung wird an die Konsole ausgegeben, sodass Sie dieses Standardverhalten abfangen können, um eine benutzerdefinierte Verarbeitungslogik hinzuzufügen: 🎜import { ErrorHandler, Injectable, Injector } from "@angular/core"; import { HttpErrorResponse } from "@angular/common/http"; // Services import { NotificationService } from "../services/notification.service"; import { LoggingService } from "../services/logging.service"; @Injectable() export class ErrorsHandler implements ErrorHandler { //Error handling需要先加载,使用Injector手动注入服务 constructor(private injector: Injector) {} handleError(error: Error | HttpErrorResponse) { const notifier = this.injector.get(NotificationService); const logger = this.injector.get(LoggingService); if (!navigator.onLine) { //console.error("Browser Offline!"); notifier.showError("Browser Offline!"); } else { if (error instanceof HttpErrorResponse) { if (!navigator.onLine) { //console.error("Browser Offline!"); notifier.showError(error.message); } else { // Handle Http Error (4xx, 5xx, ect.) // console.error("Http Error!"); notifier.showError("Http Error: " + error.message); } } else { // Handle Client Error (Angular Error, ReferenceError...) // console.error("Client Error!"); notifier.showError(error.message); } // console.error(error); logger.logError(error); } } }
🎜Erstellen Sie normalerweise ein freigegebenes Verzeichnis unter dem Code🎜Jetzt müssen wir das Standardverhalten der Anwendung ändern, um unsere benutzerdefinierte Klasse anstelle vonapp
shared und platzieren Sie diese Datei im Ordnerproviders
🎜
ErrorHandler. Ändern Sie die Datei <code>app.module.ts
, importieren Sie ErrorHandler
aus @angular/core
und fügen Sie providers
zu @NgModule Modul, der Code lautet wie folgt: 🎜rrreeeHttpInterceptor
🎜HttpInterceptor
bietet eine Möglichkeit, HTTP-Anfragen/-Antworten abzufangen und zu verarbeiten, bevor sie weitergeleitet werden. Beispielsweise kann eine HTTP-Anfrage mehrmals wiederholt werden, bevor ein Fehler ausgegeben wird. Auf diese Weise können Zeitüberschreitungen ordnungsgemäß behandelt werden, ohne dass Fehler ausgegeben werden müssen. 🎜🎜Sie können auch den Status des Fehlers überprüfen, bevor Sie ihn auslösen. Mithilfe eines Interceptors können Sie den 401-Statusfehlercode überprüfen und den Benutzer zur Anmeldeseite weiterleiten. 🎜rrreee🎜Muss auch zu app.module.ts
hinzugefügt werden 🎜rrreee🎜Mehrere Anbieter werden verwendet, um erweiterbare Dienste zu erstellen, und andere Anbieter können ebenfalls verwendet werden registriert wer. Zur Steuerung des Systemverhaltens wird eine Kombination aus dem Standardanbieter und anderen Anbietern verwendet. 🎜
Benachrichtigungen
🎜Das Drucken von Fehlerprotokollen auf der Konsole ist für Entwickler sehr benutzerfreundlich, für Benutzer jedoch nicht. Es ist eine benutzerfreundliche Möglichkeit erforderlich, über die GUI zu erkennen, wann diese Fehler auftreten. Je nach Fehlertyp werden zwei Komponenten empfohlen:Snackbar
und Dialog
🎜- 🎜
Snackbar
: empfohlen für einfache Eingabeaufforderungen, Beispielsweise fehlen in Formularen erforderliche Felder oder die Benachrichtigung von Benutzern über vorhersehbare Fehler (ungültige E-Mail-Adresse, zu langer Benutzername usw.) 🎜 - 🎜
Dialog
: Diese Methode wird empfohlen, wenn unbekannte serverseitige oder clientseitige Fehler vorliegen. Auf diese Weise können weitere Beschreibungen angezeigt werden, und sogarCall-to-Action
, z. B. die Möglichkeit für Benutzer, ihre E-Mail-Adresse einzugeben, um Fehler zu verfolgen. 🎜
shared
hinzu, um alle Benachrichtigungen zu verarbeiten, erstellen Sie einen neuen Ordner services
und erstellen Sie die Datei: notification.service.ts
, der Code lautet wie folgt: 🎜rrreee🎜Aktualisieren Sie error-handler.ts
und fügen Sie NotificationService
hinzu: 🎜rrreee🎜Wenn ein Fehler vorliegt In eine Komponente geworfen, können Sie eine schöne snackbar
-Nachricht sehen: 🎜Protokoll- und Fehlerverfolgung
🎜Von Natürlich nicht erwartet. Benutzer melden jedenBug
und nach der Bereitstellung in der Produktion sind keine Konsolenprotokolle zu sehen. Daher benötigen Sie einen Backend-Dienst, der Fehler protokollieren und benutzerdefinierte Logik in die Datenbank schreiben oder vorhandene Lösungen wie Rollbar
, Sentry
, Bugsnag
verwenden kann > Code>. 🎜🎜Als nächstes erstellen Sie einen einfachen Fehlerverfolgungsdienst, erstellen Sie logging.service.ts
: 🎜rrreee🎜Fügen Sie den Dienst zu error-handler.ts
hinzu: 🎜rrreee🎜 An dieser Stelle , Der gesamte Fehlerbehandlungsmechanismus wurde eingeführt, der im Wesentlichen der Art und Weise ähnelt, wie Projekte behandelt werden, die in anderen Frameworks oder Sprachen entwickelt wurden. 🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !
Das obige ist der detaillierte Inhalt vonLassen Sie uns über häufig verwendete Fehlerbehandlungsmethoden in Angular sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Verwenden Sie Middleware, um die Fehlerbehandlung in Go-Funktionen zu verbessern: Einführung in das Konzept der Middleware, die Funktionsaufrufe abfangen und bestimmte Logik ausführen kann. Erstellen Sie eine Fehlerbehandlungs-Middleware, die die Fehlerbehandlungslogik in eine benutzerdefinierte Funktion einbindet. Verwenden Sie Middleware, um Handlerfunktionen so zu umschließen, dass die Fehlerbehandlungslogik ausgeführt wird, bevor die Funktion aufgerufen wird. Gibt den entsprechenden Fehlercode basierend auf dem Fehlertyp zurück

In C++ behandelt die Ausnahmebehandlung Fehler ordnungsgemäß über Try-Catch-Blöcke. Zu den häufigsten Ausnahmetypen gehören Laufzeitfehler, Logikfehler und Fehler außerhalb der Grenzen. Nehmen Sie als Beispiel die Fehlerbehandlung beim Öffnen einer Datei. Wenn das Programm eine Datei nicht öffnen kann, löst es eine Ausnahme aus, gibt die Fehlermeldung aus und gibt den Fehlercode über den Catch-Block zurück, wodurch der Fehler behandelt wird, ohne das Programm zu beenden. Die Ausnahmebehandlung bietet Vorteile wie die Zentralisierung der Fehlerbehandlung, Fehlerweitergabe und Code-Robustheit.

Die Fehlerbehandlung und -protokollierung im C++-Klassendesign umfasst: Ausnahmebehandlung: Ausnahmen abfangen und behandeln, wobei benutzerdefinierte Ausnahmeklassen verwendet werden, um spezifische Fehlerinformationen bereitzustellen. Fehlercode: Verwenden Sie eine Ganzzahl oder Aufzählung, um die Fehlerbedingung darzustellen und im Rückgabewert zurückzugeben. Behauptung: Überprüfen Sie Vor- und Nachbedingungen und lösen Sie eine Ausnahme aus, wenn sie nicht erfüllt sind. Protokollierung der C++-Bibliothek: Grundlegende Protokollierung mit std::cerr und std::clog. Externe Protokollierungsbibliotheken: Integrieren Sie Bibliotheken von Drittanbietern für erweiterte Funktionen wie Ebenenfilterung und Protokolldateirotation. Benutzerdefinierte Protokollklasse: Erstellen Sie Ihre eigene Protokollklasse, abstrahieren Sie den zugrunde liegenden Mechanismus und stellen Sie eine gemeinsame Schnittstelle zum Aufzeichnen verschiedener Informationsebenen bereit.

Zu den besten Tools und Bibliotheken zur Fehlerbehandlung in PHP gehören: Integrierte Methoden: set_error_handler() und error_get_last() Toolkits von Drittanbietern: Whoops (Debugging und Fehlerformatierung) Dienste von Drittanbietern: Sentry (Fehlermeldung und -überwachung) Drittanbieter Bibliotheken: PHP-error-handler (benutzerdefinierte Fehlerprotokollierung und Stack-Traces) und Monolog (Fehlerprotokollierungshandler)

GoLang-Funktionen können eine Fehlerinternationalisierung über die Funktionen Wrapf und Errorf im Fehlerpaket durchführen, wodurch lokalisierte Fehlermeldungen erstellt und an andere Fehler angehängt werden, um Fehler höherer Ebene zu bilden. Mithilfe der Wrapf-Funktion können Sie Fehler auf niedriger Ebene internationalisieren und benutzerdefinierte Meldungen anhängen, z. B. „Fehler beim Öffnen der Datei %s“.

Zu den Best Practices für die Fehlerbehandlung in Go gehören: Verwendung des Fehlertyps, immer die Rückgabe eines Fehlers, Prüfung auf Fehler, Verwendung mehrwertiger Rückgaben, Verwendung von Sentinel-Fehlern und Verwendung von Fehler-Wrappern. Praktisches Beispiel: Wenn ReadDataFromDatabase im HTTP-Anforderungshandler einen Fehler zurückgibt, geben Sie eine 500-Fehlerantwort zurück.

Beim Testen von Go-Funktionseinheiten gibt es zwei Hauptstrategien für die Fehlerbehandlung: 1. Stellen Sie den Fehler als einen bestimmten Wert des Fehlertyps dar, der zur Bestätigung des erwarteten Werts verwendet wird. 2. Verwenden Sie Kanäle, um Fehler an die Testfunktion zu übergeben. Dies eignet sich zum Testen von gleichzeitigem Code. In einem praktischen Fall wird die Fehlerwertstrategie verwendet, um sicherzustellen, dass die Funktion bei negativer Eingabe 0 zurückgibt.

In Golang können Sie mit Fehler-Wrappern neue Fehler erstellen, indem Sie Kontextinformationen an den ursprünglichen Fehler anhängen. Dies kann verwendet werden, um die von verschiedenen Bibliotheken oder Komponenten ausgelösten Fehlertypen zu vereinheitlichen und so das Debuggen und die Fehlerbehandlung zu vereinfachen. Die Schritte lauten wie folgt: Verwenden Sie die Funktion „errors.Wrap“, um die ursprünglichen Fehler in neue Fehler umzuwandeln. Der neue Fehler enthält Kontextinformationen zum ursprünglichen Fehler. Verwenden Sie fmt.Printf, um umschlossene Fehler auszugeben und so mehr Kontext und Umsetzbarkeit bereitzustellen. Wenn Sie verschiedene Fehlertypen behandeln, verwenden Sie die Funktion „errors.Wrap“, um die Fehlertypen zu vereinheitlichen.
