基于类的axios完整封装
warning:
这篇文章距离上次修改已过201天,其中的内容可能已经有所变动。
以下是一个基于axios的简单类式封装示例,包括了请求拦截器和响应拦截器的基本实现。
import axios from 'axios';
class HttpRequest {
constructor(baseUrl = '') {
this.baseUrl = baseUrl;
this.queue = {};
}
getInsideConfig() {
const config = {
baseURL: this.baseUrl,
headers: {},
};
return config;
}
destroy(url) {
delete this.queue[url];
}
interceptors(instance, url) {
// 请求拦截器
instance.interceptors.request.use(
config => {
// 可以在这里添加请求头等信息
// 例如:config.headers['Authorization'] = 'Bearer your-token';
this.queue[url] = true;
return config;
},
error => {
return Promise.reject(error);
}
);
// 响应拦截器
instance.interceptors.response.use(
response => {
this.destroy(url);
const { data, status } = response;
return { data, status };
},
error => {
this.destroy(url);
let { message } = error;
if (message == "Network Error") {
message = "后端接口连接异常";
}
// 这里可以对错误情况进行自定义处理
// 例如:对于401错误,可以重新登录等
return Promise.reject(error);
}
);
}
request(options) {
const instance = axios.create();
options = { ...this.getInsideConfig(), ...options };
this.interceptors(instance, options.url);
return instance(options);
}
}
export default HttpRequest;
使用方法:
import HttpRequest from './HttpRequest';
const http = new HttpRequest('https://api.yourdomain.com');
http.request({
url: '/endpoint',
method: 'get',
params: {
key: 'value'
}
}).then(response => {
console.log(response);
}).catch(error => {
console.error(error);
});
这个封装允许你创建一个全局的HTTP请求实例,并且可以方便地在请求或响应阶段添加拦截器来处理通用的逻辑,比如认证、错误处理等。在实例化HttpRequest
时,可以传入一个基础URL,所有的请求都会基于这个URL。每个请求还可以配置自己的拦截器,以满足特定的需求。
评论已关闭