新建文件src目录下新建api文件夹并新建http.js导入axios和qsimport axios from axios;import qs from qs;根据环境变量区分接口的默认地址switch (process.env.NODE_ENV) {case production:axios.defaults.b...

新建文件
src目录下新建api文件夹并新建http.js
- 导入axios和qs
import axios from 'axios';
import qs from 'qs';
- 根据环境变量区分接口的默认地址
switch (process.env.NODE_ENV) {
case "production":
axios.defaults.baseURL = "http://api.wangjie.com";
break;
case "test":
axios.defaults.baseURL = "http://api.test.com";
break;
default:
axios.defaults.baseURL = "http://localhost:8080"
}
- 设置超时时间和跨域是否允许携带凭证
axios.defaults.timeout = 10000;
axios.defaults.withCredentials = true;
- 设置请求传递数据的格式
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.transformRequest = data => qs.stringify(data);
- 设置请求拦截器
axios.interceptors.request.use(config => {
// 携带token
let token = localStorage.getItem('token');
token && (config.headers.Authorization = token)
return config
}, error => {
return Promise(reject(error))
});
- 设置响应拦截器
axios.interceptors.response.use(response => {
return response.data;
}, error => {
let { response } = error;
if (response) {
switch (response.status) {
case 401: // 权限不足,未登录状态
break;
case 403: // 服务器拒绝执行 token/session过期
break;
case 404: // 找不到页面
break;
}
} else {
if (!window.navigator.onLine) {
// 断网处理
return;
} else {
return Promise.reject(error);
}
}
})
- 导出配置
export default axios;
沃梦达教程
本文标题为:Axios的二次封装


基础教程推荐
猜你喜欢
- Android开发Compose集成高德地图实例 2023-06-15
- Android Compose自定义TextField实现自定义的输入框 2023-05-13
- IOS获取系统相册中照片的示例代码 2023-01-03
- Android实现短信验证码输入框 2023-04-29
- iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi 2023-06-18
- Flutter进阶之实现动画效果(三) 2022-10-28
- iOS开发 全机型适配解决方法 2023-01-14
- MVVMLight项目Model View结构及全局视图模型注入器 2023-05-07
- iOS开发使用XML解析网络数据 2022-11-12
- iOS Crash常规跟踪方法及Bugly集成运用详细介绍 2023-01-18