angular angular,什么是angular
本篇文章带大家了解一下有角的中的异常处理错误处理程序,通过例子介绍一下错误处理程序的使用方法,希望对大家有所帮助!
ErrorHandler
以实际开发中一个例子演示使用方式:
假如前端有提出一个新需求为前端添加全局错误处理并上报错误日志,处理如下:
1、创建错误处理的错误处理程序。服务。分时(同timesharing)
从" @angular/common/http "导入{ http客户端};
从" @角度/核心"导入{ ErrorHandler,injectible };
@可注射()
导出类AppGlobalErrorhandler实现错误处理程序{
构造函数(私有http:HttpClient){ }
//当程序中出现异常时,会自动调用handleError钩子,可判断是客户端还是来自服务端的异常。
handleError(错误){
//打印错处信息
控制台。warn( customize catch exception:,错误。栈);
//.
//异常处理逻辑
//.
if([ ExpressionChangedAfterItHasBeenCheckedError]).每(item=!error.stack.includes(item))){
//上报错误日志
this.http.post(/api/errorLog ,{
url: location.href,
类型:“WEB”,
错误:error.stack,
消息:error.toString()
}).订阅()
}
}
}2、在应用程序模块中添加
从""导入{ AppGlobalErrorhandler } ./service/错误处理程序。服务;
.
提供商:[
.
{ provide: ErrorHandler,useClass: GlobalErrorHandler},
.
]3、在上面处理的是页面发生的异常,实际开发中同时也需要上报接口等的异常,当前使用的是恩阿兰框架,所以在default.interceptor.ts拦截器中添加代码,具体参考:ng-alain—拦截网络请求
私有句柄数据(
事件:httpresponse any HttpErrorResponse
数据?任何
):Observableany {
//判断是否为错误实例
如果(事件实例HttpErrorResponse事件的。网址。的索引( API/错误日志)===-1){
//上报接口错误日志
this.http.post(/api/errorLog ,{
url: event.url,
类型:"接口",
消息:事件。消息,
状态:事件状态,
statusText: event.statusText,
param:JSON。stringify(数据[ body ] 未定义),
正文:JSON。stringify((event as any)[ body ] undefined),
错误:JSON.stringify( event.error),
}).订阅()
}
(事件)的返回;
}
//拦截器
拦截(
req: HttpRequestany,
接下来:HttpHandler,
){
返回next.handle(newReq).管道(
//当请求发生错误时,使用一个管道把错误发送给错误处理器
捕捉错误((err:HttpErrorResponse)=this。处理数据(err,newReq)),
mergeMap((event: any)={
//允许统一对请求错误处理,这是因为一个请求若是业务上错误的情况下其超文本传送协议请求的状态是200的情况下需要
HttpResponse事件.状态的事件实例===200)
返回this.handleData(事件);
//若一切都正常,则后续操作
(事件)的返回;
}),
);
}上面第3点的写法中的不是通过自动调用handleError钩子来处理错误的,在拦截机拦截器中只能处理HttpErrorResponse类型的错误,如果这里处理了,那么错误处理程序将捕获不到。所以在拦截机中,如果一定要通过handleError钩子函数来处理错误,那么就需要将HttpErrorResponse类型的错误抛出。如下:
catchError(错误:HttpErrorResponse)={
if (error.status===401) {
//跳到登录页或者刷新代币
}否则{
返回throwError(错误);
}
})更多编程相关知识,请访问:编程视频!以上就是一起聊聊有角的中的错误处理程序的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。