2017-08-17 181 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)