1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| import {Loading} from '../components/NetworkLoading' import Toast from 'react-native-root-toast';
const codeMessage = { 200: '服务器成功返回请求的数据。', 201: '新建或修改数据成功。', 202: '一个请求已经进入后台排队(异步任务)。', 204: '删除数据成功。', 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。', 401: '用户没有权限(令牌、用户名、密码错误)。', 403: '用户得到授权,但是访问是被禁止的。', 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。', 406: '请求的格式不可得。', 410: '请求的资源被永久删除,且不会再得到的。', 422: '当创建一个对象时,发生一个验证错误。', 500: '服务器发生错误,请检查服务器。', 502: '网关错误。', 503: '服务不可用,服务器暂时过载或维护。', 504: '网关超时。', }; function checkStatus(response) { Loading.hidden() if (response.status >= 200 && response.status < 300) { return response; } const errortext = codeMessage[response.status] || response.statusText; Toast.show(errortext,{duration: Toast.durations.LONG,position: Toast.positions.CENTER,}) const error = new Error(errortext); error.name = response.status; error.response = response; throw error; }
export function toParams(param) { var result = "" for (let name in param) { if (typeof param[name] != 'function') { result += "&" + name + "=" + encodeURI(param[name]); } } return result.substring(1) }
export default function request(url, options) { Loading.show() const defaultOptions = { credentials: 'include', }; const newOptions = { ...defaultOptions, ...options }; if (newOptions.method === 'POST' || newOptions.method === 'PUT') { if (!(newOptions.body instanceof FormData)) { newOptions.headers = { Accept: 'application/json', 'Content-Type': 'application/x-www-form-urlencoded', ...newOptions.headers, }; newOptions.body = toParams(newOptions.body); } else { newOptions.headers = { Accept: 'application/json', ...newOptions.headers, }; } } console.log(newOptions)
let timer = setTimeout(() => { Loading.hidden() Toast.show('请求超时,请烧后重试!',{duration: Toast.durations.SHORT,position: Toast.positions.CENTER,}) }, 30000);
return fetch('http://app.xxx.cn' + url, newOptions) .then(checkStatus) .then(response => { timer && clearTimeout(timer); if (newOptions.method === 'DELETE' || response.status === 204) { return response.text(); } return response.json(); }) .catch(e => { console.log("e:",e) Loading.hidden() }); }
|