假如一个项目中有多个类型接口,他们的baseurl是不一致的,怎么统一封装呢?
import axios from 'axios';
// 创建axios实例
const service = axios.create({
baseURL: '/api'
});
// 请求拦截器;
service.interceptors.request.use(
function (config: any) {},
function (error: any) {}
);
// 响应拦截器;
service.interceptors.response.use(
function (response: any) {},
function (error: any) {}
);
export default service;假如现在有两个接口,baseURL如下
1、'/server'
2、'/question'
怎么封装更好呢,单独创建一个新的文件根据不同baseURL封装还是同一个文件创建不同axios实例?下面的方式可行吗?
const service = axios.create({
baseURL: '/api'
});
// 创建不同 baseURL 的 axios 实例
const service1 = axios.create({
baseURL: '/server'
});
const service2 = axios.create({
baseURL: '/question'
});
// 定义一个函数来添加拦截器,避免代码重复
const addInterceptors = (instance: any) => {
// 请求拦截器
instance.interceptors.request.use(
function (config: any) {},
function (error: any) {}
);
// 响应拦截器
instance.interceptors.response.use(
function (response: any) {},
function (error: any) {}
);
};
// 为每个实例添加拦截器
addInterceptors(service);
addInterceptors(service1);
addInterceptors(service2);
// 导出所有实例
export { service, service1, service2 };
方案结构
src/
├── api/
│ ├── request.ts // axios 工厂函数 + 拦截器封装
│ ├── server.ts // /server 接口封装
│ ├── question.ts // /question 接口封装
request.ts(axios 工厂函数)
server.ts(封装 /server 接口)
question.ts(封装 /question 接口)
使用方式(例如在 React 中)