为什么要二次封装数据请求:
1. 因为我们数据请求的时候需要给请求的域名或者叫 ip 地址,该地址可能后期会发生改变, 那么如果不封装会导致我们需要手动的修改所有的请求地址
2. 因为请求 get 和 post 或者其他请求,传参的方式不统一,所以我们用的时候可能会产生 用错用混的情况,所以我们封装一套可以使用统一传参方式
const isDev = process.env.NODE_ENV === 'development'
const request = axios.create({
baseURL: isDev ? 'http://121.89.205.189:3000/admin' : 'http://121.89.205.189:3000/admin',
timeout: 60000
})
request.interceptors.request.use(function (config) {
const token = localStorage.getItem('token') || ''
config.headers.token = token
return config;
}, function (error) {
return Promise.reject(error);
});
request.interceptors.response.use(function (response) {
if (response.data.code == '10119') {
localStorage.clear()
window.location.href = '/#/login'
}
return response.data;
}, function (error) {
return Promise.reject(error);
});
export default function ajax (config) {
const { url = '', method = 'GET', data = {}, headers = {} } = config
switch (method.toUpperCase()) {
case 'GET':
return request.get(url, { params: data })
case 'POST':
if (headers['content-type'] == 'application/x-www-form-url-encoded') {
const obj = new URLSearchParams()
for (const key in data) {
obj.append(key, data[key])
}
return request.post(url, obj, { headers })
}
if (headers['content-type'] == 'multipart/form-data') {
const obj = new FormData()
for (const key in data) {
obj.append(key, data[key])
}
return request.post(url, obj, { headers })
}
return request.post(url, data)
case 'PUT':
return request.put(url, data)
case 'DELETE':
return request.delete(url, { data })
case 'PATCH':
return request.patch(url, data)
default:
return request.request(config)
}
}