import axios from "axios";
import { message } from 'antd';
let request = axios.create({
headers: {
'Content-Type': 'application/json; charset=utf-8',
}
})
// url
request.defaults.baseURL = process.env.REACT_APP_BASE_URL;
const formatRequestParams = (params: any) => {
if (params && params !== {}) {
const obj = Object.keys(params).reduce((previousValue, currentValue) => {
if (!params[currentValue]) {
return {
...previousValue,
[currentValue]: params[currentValue]
}
}
return previousValue
}, {})
return obj
}
return params
}
request.interceptors.request.use(
config => {
if (config.dataType !== 'form') {
config.data = JSON.stringify(config.data);
}
const formatParams = formatRequestParams(config.params)
const newConfg = {
...config,
headers: {
...config.headers,
'X-Token': localStorage.getItem('token')
},
params: formatParams,
postData: {
...config.postData,
}
};
return newConfg;
},
err => {
return Promise.reject(err)
})
request.interceptors.response.use(function (response) {
const { data, headers } = response;
return headers['content-type'] === "application/octet-stream" ? response : data
}, function (error) {
const status = error?.response?.status;
if (status === 417) {
// 业务场景,各自发挥
window.alert('Your token is expired, please login again')
}
const data = error?.response?.data;
const msg = data?.error?.msg;
message.error(msg)
return Promise.resolve({
data: [],
paging: {},
error: true,
response: error?.response || {},
});
});
export default request;
API 封装(axios)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 在做vue中大型项目的时候,官方推荐使用axios,但是原生的axios可能对项目的适配不友好,所以,在工程...
- 文件目录 request.js state.js http.js api.js 页面写法 http 请求 http...
- 一、axios的封装 在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise...