2017-08-17 184 views
1

我们需要一种方法来处理全局角度误差包括不正确的HTTP调用像401或500处理全局角度4个错误

我看到有映入全球角度例外的ErrorHandle类,但该类不检测不正确的(例如状态500)http调用。那么是否有另一种方法来处理这两种类型的错误,或者我需要从他们到另一个定制服务创建某种类型的委派?

+1

化妆使用'角度拦截器'[链接](https://angular.io/api/common/http/HttpInterceptor) –

回答

0

当您使用的是Angular 4时,您可以使用新的HttpClient,并简单地为您的HTTP响应编写拦截器。 在Angular docs for HttpClient更多的细节和例子。

编辑:添加例子

import { Injectable } from '@angular/core'; 
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http' 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/do'; 

@Injectable() 
export class ErrorInterceptor implements HttpInterceptor { 

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
     return next.handle(req).do(event => {}, err => { 
      if (err instanceof HttpErrorResponse && err.status == 401) { 
       // handle 401 errors 
      } 

      if (err instanceof HttpErrorResponse && err.status == 500) { 
       // handle 500 errors 
      } 
     }); 
    } 
} 
+0

它很多作为评论分类,请举例说明 –

+0

有没有一种方法,拦截器可以抛出一个异常,然后全局ErrorHandler可以处理该错误? 例如“在一些”if“语句中抛出新的错误('err')”? –

-1

当你的服务返回的观察到后部,无论你称它从你可以做这样的事情:在_apiErrorHandler可以

this.myService.doSomething().subscribe(
    successfulPayload => { //do stuff with the good response }, 
    error => this._apiErrorHandler(error)); 

然后将错误发送到商店,以便其他组件可以做任何他们需要做的事情,知道发生了错误。

private _apiErrorHandler(payload) { 
    this.store.dispatch({ type: 'API_ERROR', payload }); 
} 

因为这是你知道自己不会有这样的状态码的API错误500等有效载荷有一个状态属性和状态文本属性(payload.status和payload.statusText)