webentwicklung-frage-antwort-db.com.de

Angular httpClient Interceptor Fehlerbehandlung

nachdem ich die Dokumentation zu angular über die Behandlung von http-Clientfehlern gelesen habe, verstehe ich immer noch nicht, warum ich mit dem folgenden Code keinen 401-Fehler vom Server abfange:

export class interceptor implements HttpInterceptor {
    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        console.log('this log is printed on the console!');

        return next.handle(request).do(() => (err: any) => {
            console.log('this log isn't');
            if (err instanceof HttpErrorResponse) {
                if (err.status === 401) {
                    console.log('nor this one!');
                }
            }
        });
    }
}

im Konsolenprotokoll erhalte ich außerdem Folgendes:

zone.js: 2969 GET http: // localhost: 8080/test 401 ()

core.js: 1449 ERROR HttpErrorResponse {header: HttpHeaders, status: 401, statusText: "OK", url: " http: // localhost: 8080/test ", ok: false,…}

6
sarahwc5

Sie sollten einen Fehler mit catchError abfangen

return next.handle(request)
      .pipe(catchError(err => {
        if (err instanceof HttpErrorResponse) {
            if (err.status === 401) {
                console.log('this should print your error!', err.error);
            }
        }
}));
5
Amit Chigadani

Sie müssen den Argumentwert an die do-Funktion des Streams übergeben und dürfen keine neue Funktion darin erstellen:

return next.handle(request)
    .do((err: any) => {
        console.log('this log isn't');
        if (err instanceof HttpErrorResponse) {
            if (err.status === 401) {
                console.log('nor this one!');
            }
        }
    });
1
Daniel Caldera

Ihr Fehlerbehandler muss ein new Observable<HttpEvent<any>>() zurückgeben.

return next.handle(request)
    .pipe(catchError((err: any) => {
        console.log('this log isn't');
        if (err instanceof HttpErrorResponse) {
            if (err.status === 401) {
                console.log('Unauthorized');
            }
        }

      return new Observable<HttpEvent<any>>();
    }));
1
Tito Leiva

Es ist veraltet, aber Angular hat bessere Möglichkeiten, Fehler zu behandeln als Interceptor. Sie können Ihren eigenen ErrorHandler implementieren. https://angular.io/api/core/ErrorHandler =

0
Oleksii