import qs from 'qs';
import Axios from 'axios';
import getCsrfServices from './getCsrfServices';
async function httpServices(params): Promise<void> {
const {
useDefaultErrorHandle = true,
needCsrf = false,
requestName,
contentType,
...reqParams
} = params;
const { method = 'get', headers = {} } = reqParams;
const isGet = method.toUpperCase() === 'GET';
const isPost = method.toUpperCase() === 'POST';
const reqData = { ...reqParams, method };
if (isPost) {
const csrfData = await getCsrfServices();
if (contentType === 'application/json') {
reqData.data = {
...reqData.data,
...csrfData,
};
} else {
reqData.data = qs.stringify({
...reqData.data,
...csrfData,
});
}
let contentTYPE;
if (contentType) {
contentTYPE = contentType;
} else {
contentTYPE = 'application/x-www-form-urlencoded';
}
reqData.headers = {
Accept: 'application/json',
'Content-Type': contentTYPE,
...headers,
};
}
if (isGet && needCsrf) {
const csrfData = await getCsrfServices();
reqData.params = {
...reqData.params,
...csrfData,
};
}
const { CancelToken } = Axios;
let requestNameTemp = '';
Axios.interceptors.request.use((config: any) => {
if (config && config.requestName) {
requestNameTemp = config.requestName;
if (Axios[requestNameTemp] && Axios[requestNameTemp].cancel) {
Axios[requestNameTemp].cancel();
}
config.cancelToken = new CancelToken((c: any) => {
Axios[requestNameTemp] = {};
Axios[requestNameTemp].cancel = c;
});
}
return config;
});
delete reqData.requestName;
return Axios.request(reqData)
.then(response => {
const { status, data = {} } = response;
const { error, msg, data: resData = {} } = data;
if (status === 200 && error === 0) {
return Promise.resolve(resData);
}
if (useDefaultErrorHandle) {
console.log(msg || '网络错误,请稍后再试~');
}
return Promise.reject(data);
})
.catch((e = {}) => {
if (useDefaultErrorHandle) {
console.log(e.msg || '网络错误,请稍后再试~');
}
return Promise.reject(e);
});
}
export default httpServices;
httpServices({
url: '/api',
method: 'post',
data: {
id: 111
},
requestName: 'requestName',
}).then((data = {}) => {
console.log(data)
});
在这里插入代码片