如何理解angular中的ErrorHandler
发表于:2025-11-21 作者:千家信息网编辑
千家信息网最后更新 2025年11月21日,本篇内容主要讲解"如何理解angular中的ErrorHandler",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何理解angular中的ErrorHa
千家信息网最后更新 2025年11月21日如何理解angular中的ErrorHandler
本篇内容主要讲解"如何理解angular中的ErrorHandler",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何理解angular中的ErrorHandler"吧!
ErrorHandler
ErrorHandler的默认实现将错误消息打印到console。要拦截错误处理,请编写一个自定义的异常处理器,该异常处理器将把此默认行为改成你应用所需的。
以实际开发中一个例子演示使用方式:
假如前端有提出一个新需求为前端添加全局错误处理并上报错误日志,处理如下:
1、创建错误处理的error-handler.service.ts
import { HttpClient } from '@angular/common/http';import { ErrorHandler, Injectable } from '@angular/core';@Injectable()export class AppGlobalErrorhandler implements ErrorHandler { constructor(private http:HttpClient){ } // 当程序中出现异常时,会自动调用 handleError 钩子,可判断是客户端还是来自服务端的异常。 handleError(error) { // 打印错处信息 console.warn("customize catch execption:" , error.stack); // ... // 异常处理逻辑 // ... if(['ExpressionChangedAfterItHasBeenCheckedError'].every(item => !error.stack.includes(item))){ // 上报错误日志 this.http.post('/api/errorLog', { url: location.href, type: 'WEB', error: error.stack, message: error.toString() }).subscribe() } }}2、在app.module.ts中添加
import { AppGlobalErrorhandler } from './service/error-handler.service';...providers: [... { provide: ErrorHandler, useClass: GlobalErrorHandler},...]当程序中出现异常时,会自动调用
handleError钩子,可判断是客户端还是来自服务端的异常。
3、在上面处理的是页面发生的异常,实际开发中同时也需要上报接口等的异常,当前使用的是ng-alain框架,所以在default.interceptor.ts拦截器中添加代码,具体参考:ng-alain-拦截网络请求
private handleData( event: HttpResponse| HttpErrorResponse, data?:any ): Observable { // 判断是否为错误实例 if (event instanceof HttpErrorResponse && event.url.indexOf('api/errorLog') === -1) { // 上报接口错误日志 this.http.post('/api/errorLog', { url: event.url, type: 'INTERFACE', message: event.message, status: event.status, statusText: event.statusText, param: JSON.stringify(data['body']||undefined), body: JSON.stringify((event as any)['body'] || undefined), error:JSON.stringify( event.error), }).subscribe() } return of(event); }// 拦截器 intercept( req: HttpRequest , next: HttpHandler, ){ return next.handle(newReq).pipe( // 当请求发生错误时,使用一个管道把错误发送给错误处理器 catchError((err: HttpErrorResponse) => this.handleData(err,newReq)), mergeMap((event: any) => { // 允许统一对请求错误处理,这是因为一个请求若是业务上错误的情况下其HTTP请求的状态是200的情况下需要 if (event instanceof HttpResponse && event.status === 200) return this.handleData(event); // 若一切都正常,则后续操作 return of(event); }), ); }
上面第3点的写法中的不是通过自动调用handleError钩子来处理错误的,在Interceptor拦截器中只能处理HttpErrorResponse类型的错误,如果这里处理了,那么ErrorHandler将捕获不到。所以在Interceptor中,如果一定要通过handleError钩子函数来处理错误,那么就需要将HttpErrorResponse类型的错误抛出。如下:
catchError((error: HttpErrorResponse) => { if (error.status === 401) { // 跳到登录页或者刷新token } else { return throwError(error); } })到此,相信大家对"如何理解angular中的ErrorHandler"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
错误
处理
钩子
处理器
实际
日志
拦截器
内容
前端
客户
客户端
情况
接口
程序
端的
类型
还是
学习
开发
服务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
熟悉操作常用数据库是什么意思
怎么查找网页的服务器地址
局网络安全会议纪要
三级网络技术考试环境
武汉有软件开发公司吗
cs服务器如何放激光
网络安全机房配置
群控软件开发公司
有双线服务器的网游
记忆科技面试软件开发
铁路保护器数据库
网络安全手抄报儿
网络安全产品 品牌
联想服务器不定时重启
计算机软件开发的需求分析
软件开发合同 自动终止
计算机网络技术应用到会计
网络安全提醒你
装机要不要买二手服务器内存
怎样管理政府购买服务器
百度地图服务器和浏览器哪个好
数据库自动备份工具正式免费版
国家网络安全宣传周主持词
免费网络安全教育视频下载
战争文明服务器
科普网络安全文明上网
学习网络战略强国中网络安全
西安交通大学网络安全考研
中荷网络安全合作
成都我约网络技术