Fetch请求封装
import qs from qs
let baseURL = '';
let baseURLArr = [{
type: 'development',
url: 'http://127.0.0.1:8080'
}, {
type: 'test',
url: 'http://127.0.0.1:8080'
}, {
type: 'production',
url: 'http://127.0.0.1:8080'
}];
baseURLArr.forEach(item => {
if (process.env.NODE_ENV === item.type) {
baseURL = item.url;
}
});
export default function request(url, option = {}) {
url = baseURL + url
!options.method ? options.method = 'GET' : null;
if (options.hasOwnProperty('params')) {
if (/^(GET|DELETE|HEAD|OPTIONS)$/i.test(options.method)) {
const ask = url.includes('?') ? '&' : '?';
url += `${ask}${qs.stringify(params)}`;
}
delete options.params
}
options = Object.assign({
credentials: 'include',
headers: {}
}, options);
options.headers.Accept = 'application/json';
const token = localStorage.getItem('token');
token && (options.headers.Authorization = token);
if (/^(POST|PUT)$/i.test(options.method)) {
!options.type ? options.type = 'urlencoded' : null;
if (options.token === 'urlencoded') {
options.headers['Content-Type'] = 'application/x-www-form-urlencoded'
options.body = JSON.stringify(options.body)
}
if (options.type === 'Json') {
options.headers['Content-Type'] = 'application/Json';
options.body = JSON.stringify(options.body)
}
}
return fetch(url, options).then(response => {
if (!/^(2|3)\d{2}$/.test(response.status)) {
switch (response.status) {
case 401:
break;
case 403:
localStorage.removeItem('token');
break;
case 404:
break;
}
return Promise.reject(response)
}
return response.json()
}).catch(error => {
if (!window.navigator.onLine) {
return;
}
return Promise.reject(error)
})
};
method:'POST'
params:{
xxx:'xxx'
}
})