封装 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);
});