如何在 Axios 中封装事件中心EventEmitter

在 Axios 中封装一个事件中心 EventEmitter 允许你在请求的不同阶段(如请求开始、请求成功、请求失败等)触发事件。这可以通过创建一个自定义的 Axios 实例,并结合 Node.js 的 events 模块来实现。以下是一个详细的步骤指南和示例代码,展示了如何在 Axios 中封装一个事件中心。

步骤 1: 安装 Axios

首先,确保你已经安装了 Axios。如果还没有安装,可以使用 npm 或 yarn 进行安装:

npm install axios

或者

yarn add axios

步骤 2: 创建事件中心类

接下来,创建一个新的类,该类将继承自 Node.js 的 EventEmitter 类,并封装 Axios 实例。

const axios = require('axios');
const EventEmitter = require('events');class AxiosEventEmitter extends EventEmitter {constructor(baseURL = '') {super();this.axiosInstance = axios.create({baseURL: baseURL,// 可以在这里添加其他 Axios 配置});// 设置请求拦截器this.axiosInstance.interceptors.request.use(config => {// 在请求发送前触发事件this.emit('request-start', config);return config;},error => {// 请求错误时触发事件this.emit('request-error', error);return Promise.reject(error);});// 设置响应拦截器this.axiosInstance.interceptors.response.use(response => {// 请求成功时触发事件this.emit('response-success', response);return response;},error => {// 响应错误时触发事件this.emit('response-error', error);return Promise.reject(error);});}// 封装 Axios 的请求方法request(config) {return this.axiosInstance(config);}get(url, params = {}, config = {}) {return this.axiosInstance.get(url, { params, ...config });}post(url, data = {}, config = {}) {return this.axiosInstance.post(url, data, config);}// 可以根据需要添加更多的封装方法,如 put, delete 等
}module.exports = AxiosEventEmitter;

步骤 3: 使用封装的事件中心

现在,你可以在你的应用程序中使用这个封装好的 AxiosEventEmitter 类。

const AxiosEventEmitter = require('./path/to/AxiosEventEmitter');const emitter = new AxiosEventEmitter('https://api.example.com');// 监听事件
emitter.on('request-start', config => {console.log('Request started:', config.url);
});emitter.on('response-success', response => {console.log('Response succeeded:', response.data);
});emitter.on('request-error', error => {console.error('Request error:', error.message);
});emitter.on('response-error', error => {console.error('Response error:', error.response ? error.response.data : error.message);
});// 发起一个 GET 请求
emitter.get('/some-endpoint').then(response => {// 处理响应}).catch(error => {// 处理错误});

在这个示例中,AxiosEventEmitter 类封装了 Axios 实例,并添加了请求和响应拦截器来触发事件。然后,你可以在你的应用程序中创建这个类的实例,并监听你感兴趣的事件。当请求开始时、成功时、或遇到错误时,相应的事件监听器将被调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555600.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

系统守护者:使用PyCharm与Python实现关键硬件状态的实时监控

目录 前言 系统准备 软件下载与安装 安装相关库 程序准备 主体程序 更改后的程序: 编写.NET程序 前言 在现代生活中,电脑作为核心工具,其性能和稳定性的维护至关重要。为确保电脑高效运行,我们不仅需关注软件优化&#xf…

Koa2项目实战2(路由管理、项目结构优化)

添加路由(处理不同的URL请求) 路由:根据不同的URL,调用对应的处理函数。 每一个接口服务,最核心的功能是:根据不同的URL请求,返回不同的数据。也就是调用不同的接口返回不同的数据。 在 Node…

数据服务-备份服务(rsync)

1. 概述 特点: 1. rsync是个服务也是命令 2. 使用方便,具有多种模式 3. 传输数据的时候是增量传输 1.1 增量与全量 1. 增量:只会把修改,新建的内容推走 2. 全量:无论数据多少全部推送 1.2 把/etc/目录传输到另一台机器的/tmp/下面…

安卓 /proc 目录详解:从内核到进程的桥梁

在安卓系统中,/proc 目录是开发者、调试者、甚至是普通用户深入了解系统状态、性能及行为的一个重要入口。这个虚拟文件系统不仅包含了丰富的内核信息,还反映了运行中的每个进程的状态。 /proc 文件系统 /proc 文件系统(procfs)是…

前端编程艺术(3)---JavaScript

目录 1.JavaScript 1.输出 2.变量和数据类型 3.运算符 4.数组 5.函数 6.面向对象 7.ES6面向对象 2.BOM 1.document对象 3.DOM 4.JSON 1.JavaScript JavaScript是一种脚本编程语言,通常用于为网页增加交互性和动态效果。它是一种高级语言&#xff…

C++ 算法学习——1.6 差分算法与二维差分算法

一维差分算法概述: 差分算法是一种用于计算序列中相邻元素之间差值的技术。在C中,STL(标准模板库)提供了std::adjacent_difference函数来实现差分算法。 std::adjacent_difference函数: std::adjacent_difference函数位…

余承东直播论道智能驾驶:激光雷达不可或缺,华为ADS 3.0引领安全创新

华为余承东:激光雷达,智能驾驶安全性的关键 9月29日,华为消费者业务集团CEO余承东在一场引人注目的直播中,与知名主持人马东就智能驾驶技术的最新进展进行了深入交流。在这场直播中,余承东针对激光雷达在智能驾驶中的必要性问题,发表了明确且深刻的观点,引发了业界和公众…

网关路由登录校验

网关过滤器 登录校验必须在请求转发到微服务之前做,否则就失去了意义。而网关的请求转发是Gateway内部代码实现的,要想在请求转发之前做登录校验,就必须了解Gateway内部工作的基本原理。 暂时无法在飞书文档外展示此内容 如图所示&#xff…

一、Python(介绍、环境搭建)

一、介绍 Python 是一种高级编程语言,具有简洁易读的语法、丰富的库和强大的功能。Python是解释型语言,运行代码必须依赖安装好的解释器。Python目前存在两个版本:Python2、Python3(主流使用) 二、环境搭建 1.安装P…

四、函数顶层变量

函数&顶层变量 函数定义创建和使用 顶层变量递归函数实用库函数高阶函数与lambda表达式函数类型变量类型别名匿名函数lambda表达式基本用法lambda的简写 内联函数 函数 定义 其实函数我们在一开始就在使用了: fun main() {println("Hello World") …

Python 语言学习——应用1.1 数字图像处理(第一节,颜色)

目录 1.基础知识 2.实战演示 1.基础知识: 1.图像的表示. 函数表示:图像是二维信号,定义为二维函数f(x,y),其中,x、y是空间坐标,f(x,y)是点(x,y)的幅值。拓展看,视频,又称动态图像…

一阶差分模板的频率响应

一阶差分模板不同于二阶差分模板,它是一个奇对称的模板,傅里叶变换是纯虚数,无法用图形直接显示傅里叶变换,只能显示幅值谱。 冈萨雷斯的这个图我一直很好奇是怎么显示的,也没有坐标轴标出变量表示。 如今终于想明白…

论文笔记:微表情欺骗检测

整理了AAAI2018 Deception Detection in Videos 论文的阅读笔记 背景模型实验可视化 背景 欺骗在我们的日常生活中很常见。一些谎言是无害的,而另一些谎言可能会产生严重的后果。例如,在法庭上撒谎可能会影响司法公正,让有罪的被告逍遥法外。…

04-SpringBootWeb案例(中)

3. 员工管理 完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。 基于以上原型,我们可以把员工管理功能分为: 分页查询(今天完成)带条件的分页查询(今天完成)删除员工&am…

服务器conda环境安装rpy2

参考博客 https://stackoverflow.com/questions/68936589/how-to-select-r-installation-when-using-rpy2-on-conda 现在我遇到这样一个问题,服务器系统环境没有R(没有权限安装),我只能在minconda的conda环境中使用R, 使用方法如下 我现在…

芝法酱学习笔记(0.6)——nexus与maven私库

一、私库的需求 在一个公司中,后端程序员通常几十上百个。在没有镜像私库的情况下,每当引入新库时,大家都会从maven中央仓库下载一遍这个库。这样无疑十分浪费。再加之国家的防火墙政策,许多人下载lib包可能还会十分缓慢。不同程…

Python水循环标准化对比算法实现

🎯要点 算法区分不同水循环数据类型:地下水、河水、降水、气温和其他,并使用相应标准化降水指数、标准化地下水指数、标准化河流水位指数和标准化降水蒸散指数。绘制和计算特定的时间序列比较统计学相关性。使用相关矩阵可视化集水区和显示空…

推荐:五种限流(Rate Limiting)算法

推荐:五种限流(Rate Limiting)算法,发现一个不错的讲这个算法的UP,地址是:05~五种限流(Rate Limiting)算法_哔哩哔哩_bilibili https://www.bilibili.com/video/BV11k4SerE74/ 全部用动画展示,十分生动,比如漏桶算法&…

短剧小程序短剧APP在线追剧APP网剧推广分销微短剧小剧场小程序集师知识付费集师短剧小程序集师小剧场小程序集师在线追剧小程序源码

一、产品简介功能介绍 集师专属搭建您的独有短剧/追剧/小剧场小程序或APP平台 二、短剧软件私域运营解决方案 针对短剧类小程序的运营,以下提出10条具体的方案: 明确定位与目标用户: 对短剧类小程序进行明确定位,了解目标用户群体…

【AI知识点】置信区间(Confidence Interval)

置信区间(Confidence Interval, CI) 是统计学中用于估计总体参数的范围。它给出了一个区间,并且这个区间包含总体参数的概率等于某个指定的置信水平(通常是 90%、95% 或 99%)。与点估计不同,置信区间通过区…