import {Injectable} from '@angular/core'; import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse } from '@angular/common/http'; import {Observable, throwError} from 'rxjs'; import {catchError} from 'rxjs/operators'; import {ErrorDialogService, LoggingService} from '@app/_services'; import {Router} from '@angular/router'; @Injectable() export class ErrorInterceptor implements HttpInterceptor { constructor( private errorDialogService: ErrorDialogService, private loggingService: LoggingService, private router: Router ) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { return next.handle(request).pipe( catchError((err: HttpErrorResponse) => { let errorMessage: string; if (err.error instanceof ErrorEvent) { // A client-side or network error occurred. Handle it accordingly. errorMessage = `An error occurred: ${err.error.message}`; } else { // The backend returned an unsuccessful response code. // The response body may contain clues as to what went wrong. errorMessage = `Backend returned code ${err.status}, body was: ${JSON.stringify(err.error)}`; } this.loggingService.sendErrorLevelMessage(errorMessage, this, {error: err}); switch (err.status) { case 401: // unauthorized this.router.navigateByUrl('/auth').then(); break; case 403: // forbidden alert('Access to resource is not allowed!'); break; } // Return an observable with a user-facing error message. return throwError(err); }) ); } }