封裝 axios 以更好的適應現有業務!!
所有接口請求均應通過此方法來實現。!!
統一處理:Android平臺 cookie 不存在情況
統一處理:錯誤提示和錯誤上報
統一處理:雙平臺(Android | IOS)netHeader
import { Platform } from 'react-native';
import axios from 'axios';
import lodash from 'lodash';
import { fetchError } from '../util/fetchError';
import { headerMap } from './netHeader';
import * as BridgeAPI from '../config/bridge';
// 默認永不超時
axios.defaults.timeout = 0;
axios.interceptors.request.use(async config => {
let result = await BridgeAPI.getInfo();
let { userId } = result;
let DefaultOptions = {
headers: { ...headerMap }
};
if (Platform.OS === 'android') {
DefaultOptions = {
headers: {
...headerMap,
uuid: userId
}
}
}
return lodash.merge(config, DefaultOptions);
}, error => {
return Promise.reject(error);
});
axios.interceptors.response.use(response => {
let { data, config } = response;
if (data === '') {
let message = '數據不存在';
fetchError(message, 200, config);
return Promise.reject(message);
}
let { success, errCode, errMsg } = data;
if (success === undefined) {
fetchError(data.errMessage, errCode, config);
return Promise.reject(errMsg);
}
if (!success) {
fetchError(errMsg, errCode, config);
return Promise.reject(errMsg);
}
return response;
}, error => {
if (error && error.response) {
switch (error.response.status) {
case 400:
error.message = '錯誤請求';
break;
case 401:
error.message = '未授權,請重新登錄';
break;
case 403:
error.message = '拒絕訪問';
break;
case 404:
error.message = '請求錯誤,未找到該資源';
break;
case 405:
error.message = '請求方法未允許';
break;
case 408:
error.message = '請求超時';
break;
case 500:
error.message = '服務器端出錯';
break;
case 501:
error.message = '網絡未實現';
break;
case 502:
error.message = '網絡錯誤';
break;
case 503:
error.message = '服務不可用';
break;
case 504:
error.message = '網絡超時';
break;
case 505:
error.message = 'http版本不支持該請求';
break;
default:
error.message = `連接錯誤${error.response.status}`;
}
let errorData = {
status: error.response.status,
message: error.message,
config: error.response.config
};
fetchError(errorData.message, errorData.status, errorData.config);
} else {
fetchError(error.message, '000', error.config);
}
return Promise.reject(error);
});