在 Axios 中封装一个事件中心 EventEmitter 答应你在请求的差别阶段(如请求开始、请求乐成、请求失败等)触发事件。这可以通过创建一个自界说的 Axios 实例,并结合 Node.js 的 events 模块来实现。以下是一个具体的步调指南和示例代码,展示了如何在 Axios 中封装一个事件中心。
步调 1: 安装 Axios
首先,确保你已经安装了 Axios。如果还没有安装,可以使用 npm 或 yarn 进行安装:
或者
步调 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 实例,并添加了请求和响应拦截器来触发事件。然后,你可以在你的应用步伐中创建这个类的实例,并监听你感兴趣的事件。当请求开始时、乐成时、或遇到错误时,相应的事件监听器将被调用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |