我们需要一种方法来处理全局角度错误,包括错误的http调用,比如401或500。
我看到有一个捕获全局角度异常的ErrorHandle类,但是该类没有检测到不正确的(例如,状态500 ) http调用。那么,有没有其他方法来处理这两种类型的错误,或者我需要创建从它们到另一个自定义服务的某种委托?
发布于 2017-08-17 21:22:37
因为您使用的是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
}
});
}
}发布于 2017-08-17 21:31:05
当您的服务将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错误,您知道它会有一个类似state500的代码,因此有效负载有一个status属性和一个statusText属性(payload.status和payload.statusText)。
https://stackoverflow.com/questions/45736163
复制相似问题