import axios from 'axios';
import { getToken, removeToken, showToast } from '@/utils';
import router from '@/router'
const service = axios.create({
baseURL: '/',
timeout: 10000, // 超时时长
retry: 3, // 重试次数
retryDelay: 1000, // 重试延时时间
withCredentials: true, // send cookies when cross-domain requests
headers: {
// clear cors
"Cache-Control": "no-cache",
Pragma: "no-cache",
},
})
// axios实例拦截请求
service.interceptors.request.use(
(config) => {
// 在此处添加请求头等,如添加 token
config.headers = {
"xxx": "xxx"
}
return config;
},
(error) => {
Promise.reject(error);
}
)
// axios实例拦截响应
service.interceptors.response.use(
(response) => {
if (response.status === 200) {
return Promise.resolve(response.data);
} else {
return Promise.reject(response.data);
}
},
// 请求失败
(error) => {
const { response, config } = error;
if (!config || !config.retry) return Promise.reject(error);
// 如果有响应内容,就直接返回错误信息,不再发送请求
if (response?.data) {
return Promise.reject(response.data);
}
// __retryCount用来记录当前是第几次发送请求
config.__retryCount = config.__retryCount || 0;
// 如果当前发送的请求大于等于设置好的请求次数时,不再发送请求,返回最终的错误信息
if (config.__retryCount >= config.retry) {
if (error.message === "timeout of 10000ms exceeded") {
return Promise.reject("Time Out");
} else {
return Promise.reject('Network Error');
}
}
// 记录请求次数+1
config.__retryCount += 1;
// 设置请求间隔 在发送下一次请求之前停留一段时间,时间为上方设置好的请求间隔时间
var backoff = new Promise(function (resolve) {
setTimeout(function () {
resolve();
}, config.retryDelay || 1);
});
// 再次发送请求
return backoff.then(function () {
return service(config);
});
}
);
export default service
04-21
494
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交