在 Axios 中封装一个事件中心 EventEmitter
允许你在请求的不同阶段(如请求开始、请求成功、请求失败等)触发事件。这可以通过创建一个自定义的 Axios 实例,并结合 Node.js 的 events
模块来实现。以下是一个详细的步骤指南和示例代码,展示了如何在 Axios 中封装一个事件中心。
步骤 1: 安装 Axios
首先,确保你已经安装了 Axios。如果还没有安装,可以使用 npm 或 yarn 进行安装:
bash
npm install axios
或者
bash
yarn add axios
步骤 2: 创建事件中心类
接下来,创建一个新的类,该类将继承自 Node.js 的 EventEmitter
类,并封装 Axios 实例。
javascript
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
类。
javascript
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 实例,并添加了请求和响应拦截器来触发事件。然后,你可以在你的应用程序中创建这个类的实例,并监听你感兴趣的事件。当请求开始时、成功时、或遇到错误时,相应的事件监听器将被调用。