新建文件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实现轮询的三种方式 2023-02-17
- Android实现监听音量的变化 2023-03-30
- Android studio实现动态背景页面 2023-05-23
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- Flutter实现底部和顶部导航栏 2022-08-31
- iOS 对当前webView进行截屏的方法 2023-03-01
- 详解flutter engine 那些没被释放的东西 2022-12-04