import Cookies from 'js-cookie';
import axios from 'axios';
import { getToken } from './token';
// const { CancelToken } = axios;
// 初始化配置
const http = axios.create({
baseURL: '/api',
});
// // 请求拦截器
http.interceptors.request.use(
(config) => {
const token = Cookies.get('token');
if (config.token !== false && !token) {
// let cancel;
// const nextConfig = { ...config };
// eslint-disable-next-line no-param-reassign
// config.cancelToken = new CancelToken((c) => {
// cancel = c;
// });
// 缺少 Token,请求取消
// cancel();
// 预请求 token,绕过 iways 登录
// getToken(http).then(() => http(nextConfig));
getToken(http).then(() => window.location.reload());
}
// 注入 token
// eslint-disable-next-line no-param-reassign
config.headers.token = token;
// config.headers.token = "token";
// 注入请求数据
// eslint-disable-next-line no-param-reassign
config.data = { data: config.data };
// 由于广本接口结构不统一,屏蔽掉这里
return config;
},
(error) => Promise.reject(error),
);
// // 响应拦截器
http.interceptors.response.use(
(response) => {
let { status, data } = response;
// 二进制流文件
if (status === 200 && !data.status) return response;
({ status: { status }, data } = data);
// 数据请求失败
if (status !== 0) {
// Token 过期重刷
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject({ response: response.data.status });
}
// 成功并返回数据
return data || {};
},
(error) => {
// 因无 Token 而取消的请求不抛出错误
if (axios.isCancel(error)) {
return undefined;
}
if (error.response) {
return Promise.reject(new Error(`Http ${error.message}`));
}
return Promise.reject(error);
},
);
export default http;
路由拦截器
于 2021-04-16 15:43:27 首次发布