[我想要Angular 8 Web应用程序的错误处理程序拦截器

问题描述 投票:-3回答:1

我想要Angular 8 Web应用程序的错误处理程序拦截器。我已经实现了请求和响应句柄拦截器。但需要一个错误处理程序拦截器]

angular angular-http-interceptors
1个回答
0
投票

我找到了解决方案

 import {
   HttpEvent,
   HttpHandler,
   HttpInterceptor,
   HttpRequest,
   HttpResponse
 } from '@angular/common/http';
 import { Injectable } from '@angular/core';
 import { Router } from '@angular/router';
 import { LocalStorageService } from '@app/core/local-storage.service';
 import { ErrorMessageService } from '@app/core/service';
 import { environment } from '@env/environment';
 import { Observable } from 'rxjs';
 import { catchError } from 'rxjs/operators';

 const credentialsKey = 'credentials';

 /**
  * Adds a default error handler to all requests.
  */
 @Injectable()
 export class ErrorHandlerInterceptor implements HttpInterceptor {
   constructor(
     private router: Router,
     private localStorageService: LocalStorageService,
     private errorMessageService: ErrorMessageService
   ) {}

   intercept(
     request: HttpRequest<any>,
     next: HttpHandler
   ): Observable<HttpEvent<any>> {
     return next
       .handle(request)
       .pipe(catchError(error => this.errorHandler(error)));
   }

   // Customize the default error handler here if needed
   private errorHandler(
     response: HttpResponse<any>
   ): Observable<HttpEvent<any>> {
     if (response.status === 401) {
       this.localStorageService.clearItem(credentialsKey);
       this.router.navigate(['/login'], {
         replaceUrl: true
       });
     } else if (response.status === 400) {
       const errorResponse: any = response;
       if (errorResponse.error) {
         if (errorResponse.error.validation) {
           errorResponse.error.validation.keys.forEach((key: string) => {
             this.errorMessageService.set(
               errorResponse.error.validation.errors[key],
               key,
               response.url
             );
           });
         } else {
           this.errorMessageService.set(
             errorResponse.error.error,
             '_GLOBAL_',
             response.url
           );
         }
       }
     }

     if (!environment.production) {
       // Do something with the error
       console.error('Request error', response);
     }
     throw response;
   }
 }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.