Wenn wir über den Ausnahmefilter von Nestjs sprechen, müssen wir den globalen Filter von .Net erwähnen, der ziemlich leistungsstark ist. Theoretisch wird er als aspektorientierte Programmierung von AOP bezeichnet, die zu viele Szenarien erleichtert, die eine Ausnahmebehandlung erfordern. Zurück zum Ausnahmefilter von Nestjs: Er implementiert ähnliche Funktionen und verwendet ähnliche Verarbeitungsmethoden, aber eine ist für C# und die andere für Nodejs. Glücklicherweise habe ich in beiden Frameworks ähnliche Dinge gefunden. Aspektorientierte Programmierung (AOP) ist so etwas wie eine Programmierspezifikation. In der Praxis wird es auch als schnittstellenorientierte Programmierung, SOLID-Prinzipien usw. bezeichnet. Ausnahmebehandlung in Nestjs Standardmäßige AusnahmebehandlungNestjs verfügt über einen integrierten globalen Standardausnahmefilter, der Ausnahmen behandelt, die in HttpException umgewandelt werden können. Wenn es sich um eine HttpException oder eine Ausnahme ihrer Unterklasse handelt, wird das JSON-Format der Ausnahme zurückgegeben: {"exceptionCode":40005,"message":"Benutzerdefinierte Ausnahme","path":"/"} Wenn es sich nicht um eine HttpException oder eine Ausnahme ihrer Unterklasse handelt, wird Folgendes zurückgegeben: {"statusCode":500,"message":"Interner Serverfehler"} Da Nestjs eine integrierte Standard-Ausnahmebehandlung verwendet, kommt es zu keinem Programmabsturz aufgrund nicht abgefangener Ausnahmen. Benutzerdefinierte AusnahmefilterbehandlungDa das Rückgabewertformat der integrierten Ausnahmebehandlung nicht angepasst werden kann, sind benutzerdefinierte Ausnahmen normal. Benutzerdefinierte Ausnahmen können die zurückgegebenen Ausnahmeinformationen anpassen und benutzerdefinierte Ausnahmecodes hinzufügen, um es dem Clientpersonal zu erleichtern, je nach Ausnahmecode unterschiedliche Anzeigen anzuzeigen. Wie passe ich Ausnahmen an? Das Rad nicht neu zu erfinden, ist die Selbstbeherrschung eines Programmierers. Zuerst erstellen wir unsere eigene Exception-Basisklasse: importiere { HttpException } von "@nestjs/common"; /** * Definieren Sie die Basisausnahmeklasse * * @export * @class BaseException * @extends {HttpException} */ Exportklasse BaseException erweitert HttpException { /** * Erstellt eine Instanz von BaseException. * @param {number} exceptionCode benutzerdefinierte Ausnahmenummer* @param {string} errorMessage Eingabeaufforderungsnachricht* @param {number} statusCode Statuscode* @memberof BaseException */ Konstruktor(öffentlicher Ausnahmecode: Zahl, öffentliche Fehlermeldung: Zeichenfolge, öffentlicher Statuscode: Zahl) { super({ Ausnahmecode: Ausnahmecode, Fehlermeldung: Fehlermeldung }, Statuscode); } /** * Benutzerdefinierten Ausnahmecode abrufen * * @zurückkehren {*} * @memberof BaseException */ getExceptionCode(): Zahl { gib diesen Ausnahmecode zurück; } getErrorMessage(): Zeichenfolge { gib diese Fehlermeldung zurück; } getStatusCode(): Nummer { gib diesen Statuscode zurück; } } Anschließend erstellen wir einen neuen Ausnahmetyp „Nicht autorisiert“, der einen benutzerdefinierten Ausnahmecode hinzufügt: importiere { HttpStatus } von "@nestjs/common"; importiere { BaseException } aus "./base.exception"; Exportklasse UnCauhtException erweitert BaseException { Konstruktor() { super(40000, "Systembetriebsstörung, bitte kontaktieren Sie den Administrator!", HttpStatus.FORBIDDEN); } } Nachdem wir nun eine benutzerdefinierte Ausnahme erstellt haben, müssen wir nicht autorisierte Ausnahmen behandeln. Erstellen Sie zunächst eine neue benutzerdefinierte Basisklasse zur Ausnahmebehandlung. Bitte beachten Sie, dass wir hier Express verwenden: importiere { ArgumentsHost, ExceptionFilter, HttpException } von "@nestjs/common"; importiere { HttpArgumentsHost } von "@nestjs/common/interfaces"; importiere { BaseException } aus "src/exceptions/base.exception"; importiere { Antwort, Anfrage } von "express"; /** * Abnormaler Basisklassenfilter * * @export * @class BaseExceptionFilter * @implements {ExceptionFilter<BaseException>} */ exportiere abstrakte Klasse BaseExceptionFilter implementiert ExceptionFilter<BaseException> { /** *Ausnahmeklassenerfassung* * @abstrakt * @param {BaseException} Ausnahme * @param {ArgumentsHost} Gastgeber * @memberof BaseExceptionFilter */ abstrakter Catch (Ausnahme: BaseException, Host: ArgumentsHost); /** * Kontextparameter für HTTP-Anforderungen abrufen * * @geschützt * @param {ArgumentsHost} Gastgeber * @zurückkehren {*} * @memberof BaseExceptionFilter */ geschützt getHttpContext(host: ArgumentsHost) { host.switchToHttp() zurückgeben; } /** * HTTP-Antwortparameter abrufen * * @geschützt * @param {HttpArgumentsHost} httpContext * @zurückkehren {*} * @memberof BaseExceptionFilter */ geschützt getResponse(httpContext: HttpArgumentsHost): Antwort { returniere httpContext.getResponse<Antwort>(); } /** * HTTP-Anforderungsparameter abrufen * * @geschützt * @param {HttpArgumentsHost} httpContext * @zurückkehren {*} * @memberof BaseExceptionFilter */ geschützt getRequest(httpContext: HttpArgumentsHost): Anfrage { return httpContext.getRequest<Anfrage>(); } /** * Ausnahmeinformationen an den Client schreiben * * @param {ArgumentsHost} Gastgeber * @param {BaseException} Ausnahme * @memberof BaseExceptionFilter */ geschützt writeToClient(host: ArgumentsHost, Ausnahme: BaseException) { const ctx = this.getHttpContext(host); if (Ausnahmeinstanz von BaseException) { dies.getResponse(ctx).status(Ausnahme.statusCode).json({ Ausnahmecode: Ausnahme.getExceptionCode(), Nachricht: Ausnahme.getErrorMessage(), Pfad: this.getRequest(ctx).url }); }anders { const httpException=Ausnahme; dies.getResponse(ctx).status(500).json({ Meldung: „Unbehandelte Ausnahme“, Pfad: this.getRequest(ctx).url }); } } } Erstellen Sie einen neuen Handler für nicht autorisierte Ausnahmen: importiere { ArgumentsHost, Catch } von "@nestjs/common"; importiere { AuthException } aus "src/exceptions/auth.exception"; importiere { BaseException } aus "src/exceptions/base.exception"; importiere { BaseExceptionFilter } aus "./base.exception.filter"; @Catch(AuthException) Exportklasse AuthExceptionFilter erweitert BaseExceptionFilter { Konstruktor(){ super(); console.log("Initialisierung des Autorisierungsausnahmekonstruktors"+new Date().toISOString()); } Fang(Ausnahme: AuthException, Host: ArgumentsHost) { Ausnahme.AusnahmeCode=40002; console.log("Ausführung der Autorisierungsausnahme"+new Date().toISOString()); this.writeToClient(host,Ausnahme); } } Hier sind einige Erklärungen zur Klasse zur Behandlung nicht autorisierter Ausnahmen:
AnwendungAusnahmebehandlungsklassen können auf Methoden, Controller oder global angewendet werden. Sogar derselbe Controller kann mehrere benutzerdefinierte Ausnahmeklassen definieren. importiere { Controller, ForbiddenException, Get, HttpException, HttpStatus, UseFilters } von '@nestjs/common'; importiere { AppService } aus './app.service'; importiere { AuthException } aus './exceptions/auth.exception'; importiere { BusinessException } aus './exceptions/business.exception'; importiere { UnCauhtException } von './exceptions/uncauht.exception'; importiere { AuthExceptionFilter } aus './filters/auth.exception.filter'; importiere { BusinessExceptionFilter } aus './filters/business.exception.filter'; /** * Einfaches Controller-Beispiel mit einer einzigen Route */ @UseFilters(AuthExceptionFilter,BusinessExceptionFilter) @Regler() exportiere Klasse AppController { Konstruktor (privater schreibgeschützter AppService: AppService) {} @Erhalten() getHello(): Zeichenfolge { //neuen Fehler werfen("666"); throw new BusinessException("benutzerdefinierte Ausnahme",HttpStatus.OK); neue AuthException werfen(); throw new HttpException("benutzerdefinierte Ausnahme",HttpStatus.FORBIDDEN); gib dies zurück.appService.getHello(); } @Get("Name") getName():Zeichenfolge { gib "guozhiqi" zurück; } } Einige Anmerkungen:
Ein paar Fragen Wie oft wird unsere benutzerdefinierte Ausnahmebehandlungsklasse in Usefitlers initialisiert? Die vom Controller und jeder Methode definierten Ausnahmebehandlungsklassen wurden festgelegt. In welcher Reihenfolge werden mehrere Ausnahmen behandelt? Wem ähnelt @Usefilters von Nestjs? Die Ausnahmebehandlung von Nestjs ist nicht kompliziert. Kompliziert ist, dass wir unterschiedliche Arten von Ausnahmen behandeln und die Gemeinsamkeiten der Ausnahmen extrahieren müssen. Referenzdokument: docs.nestjs.cn Dies ist das Ende dieses Artikels über die spezifische Verwendung des Ausnahmefilters Exceptionfilter in nestjs. Weitere verwandte Inhalte zum Nest-Ausnahmefilter Exceptionfilter finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Detaillierte Einführung in den Nobody-Benutzer und Nologin im Unix/Linux-System
>>: Super detaillierte Schritte zur Installation von Zabbix3.0 auf Centos7
Ich plane, meine eigene Website zu erstellen, als...
In diesem Artikel erfahren Sie, wie Sie mit Vue e...
In diesem Artikelbeispiel wird der spezifische Co...
Grafisches Tutorial zur Installation und Konfigur...
Vorwort Seit der offiziellen Einführung von vue3....
Einführung in Vue und Vue-Router <script src=&...
Bevor wir über die Datenreaktivität sprechen, müs...
Vorwort Die allgemeinen Methoden sind hier nicht ...
Inhaltsverzeichnis Hintergrund LIMIT-Optimierung ...
Dieser Artikel stellt die Installation des Window...
Inhaltsverzeichnis 1 Bewertung 2 Fünf Strategien ...
1. Vorbereitung der virtuellen Maschine 1. Erstel...
1. Ordner löschen Beispiel: rm -rf /usr/java Das ...
Vorwort Um bei Datenbankoperationen die Richtigke...
Inhaltsverzeichnis 1. Front-End-Führungsprozess: ...