Angular2中的错误处理程序

7

我有一个关于新类ErrorHandler(包含在RC.6中)的问题。

我按照官方文档的示例进行了操作: https://angular.io/docs/ts/latest/api/core/index/ErrorHandler-class.html

import{ErrorHandler} from "@angular/core";
import{NgModule} from "@angular/core";
export class MyErrorHandler implements ErrorHandler {

    call(error: any, stackTrace: any = null, reason: any = null) {
        // do something with the exception
        console.log("do something with the exception");
    }

    // I handle the given error.
    public handleError( error: any ): void {
        console.log("I handle the given error");
    }

}
@NgModule({
    providers: [
        {
            provide: ErrorHandler,
            useClass: MyErrorHandler
        }
     ]
})
export class MyErrorModule {}

我编辑了我的app.module文件

import {MyErrorHandler} from "./error.module";
import {MyErrorModule } from "./error.module";
..
@NgModule({
    imports: [
        MyErrorModule
    ....
    ],
    ...
    providers: [MyErrorHandler]
   ....

现在MyErrorHandler捕获错误:
throw new Error("my test error");

但是它无法捕获像这样的http错误:"GET http://example.com/rest/user 401 (未经授权)"。有人能给我解释一下吗?

提前感谢!

2个回答

10

为处理HTTP错误,在可观测对象中添加 .catch() 操作符。

return this.http.get(url,options)
    .catch((res)=>this.handleHTTPError(res));

当一个HTTP调用返回4-500的状态码时将调用该函数。你可以根据需要抛出错误。

handleHTTPError(res:Response){
    throw new Error("HTTP error: "+res.statusText+" ("+res.status+")");
}

5
有没有一种方式可以使用自定义错误处理/服务来处理HTTP错误?我之所以问这个问题是因为我有很多服务,其中许多服务都有HTTP调用。我希望能声明一个handleHTTPError方法,以便统一处理这些HTTP错误。 - Kosmonaft
最好让一个错误拦截器来跟踪HTTP错误。它也可以跟踪服务的普通错误。 - netalex

5

严格来讲401错误(或其他任何错误)并不是真正的错误,只是一个HTTP返回代码。如果这种代码破坏了您应用程序的功能,您需要自己处理它。但是,像连接错误这样的真正错误也需要进行处理。

以下是我对此的问题:

Angular 2 http服务。获取详细的错误信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接