import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
// 定义接口,表示响应数据的结构
interface ResponseData {
code: number;
data: any;
message: string;
}
// 创建一个 Axios 实例
const instance: AxiosInstance = axios.create({
baseURL: 'https://api.example.com', // 设置默认的请求地址
timeout: 10000, // 设置请求超时时间
});
// 请求拦截器
instance.interceptors.request.use(
(config: AxiosRequestConfig) => {
// 在请求发送之前做一些处理,例如添加请求头等
return config;
},
(error: any) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 响应拦截器
instance.interceptors.response.use(
(response: AxiosResponse<ResponseData>) => {
// 对响应数据进行处理
const responseData = response.data;
if (responseData.code === 200) {
return responseData.data; // 返回数据部分
} else {
// 处理异常情况
return Promise.reject(new Error(responseData.message || '请求失败'));
}
},
(error: any) => {
// 对响应错误做些什么
return Promise.reject(error);
}
);
// 封装请求方法
const request = {
get<T = any>(url: string, params?: any): Promise<T> {
return instance.get<T>(url, { params });
},
post<T = any>(url: string, data?: any): Promise<T> {
return instance.post<T>(url, data);
},
put<T = any>(url: string, data?: any): Promise<T> {
return instance.put<T>(url, data);
},
delete<T = any>(url: string, params?: any): Promise<T> {
return instance.delete<T>(url, { params });
},
};
export default request;
在这个示例中:
- 使用
axios.create
方法创建了一个 Axios 实例,并设置了一些默认配置。 - 使用
interceptors
添加了请求拦截器和响应拦截器,用于在请求发送之前做一些处理,以及在响应返回之后对响应数据进行处理。 - 封装了
get
、post
、put
、delete
等请求方法,并返回 Promise 对象,方便调用者处理异步请求。
使用时,可以直接通过 import request from './request';
来引入这个封装好的 Axios 实例,然后调用对应的请求方法即可。