我们需要一种方法来处理全局Angular错误,包括不正确的http调用,如401或500.
我看到有一个ErrorHandle类捕获全局Angular Exceptions,但该类没有检测到错误的(例如状态500)http调用。那么有另外一种方法来处理这两种类型的错误,或者我需要从它们创建某种委托给另一种自定义服务吗?
答案 0 :(得分: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
}
});
}
}
答案 1 :(得分:-1)
当你的服务将observable返回到你调用它的任何地方时,你可以这样做:
this.myService.doSomething().subscribe(
successfulPayload => { //do stuff with the good response },
error => this._apiErrorHandler(error));
然后在_apiErrorHandler中,您可以将错误发送到商店,以便其他组件可以通过了解错误来执行他们需要做的任何事情。
private _apiErrorHandler(payload) {
this.store.dispatch({ type: 'API_ERROR', payload });
}
由于这是一个api错误,你知道它会有类似状态500的代码,因此有效负载具有status属性和statusText属性(payload.status和payload.statusText)