如何理解angular中的ErrorHandler
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"如何理解angular中的ErrorHandler",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何理解angular中的ErrorHa
千家信息网最后更新 2026年11月03日如何理解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安全错误
数据库的锁怎样保障安全
深圳九邦互联网科技有限公司
互联网科技网
互联网科技公司起名
科技赋能下的互联网金融
腾讯阿里互联网科技
华宇互联网科技
互联网科技英文
宜安科技 互联网金融
猫创互联网科技
互联网科技视频素材
云创客互联网科技公司
南山科技园互联网公司有哪些
企晟互联网信息科技有限公司
朱啸虎曾投资哪些互联网科技企业
产业互联网科技服务公司
互联网硬科技公司
互联网科技手机排行榜
北京天晋互联网科技有限公司
互联网领先科技成果宣传视频
互联网 科技节活动 微视频大赛
互联网科技官网
互联网金融与金融科技
互联网实体化科技化
深圳市运趣互联网科技有限公司
科技与互联网的利与弊
互联网大会黑科技排名
河南猎农互联网科技有限公司
互联网媒体平台算高科技产业
高科技互联网套路
长沙渺峰互联网科技有限公司