/** * request 网络请求工具 * 更详细的 api 文档: https://github.com/umijs/umi-request */ import { extend } from 'umi-request'; import { notification } from 'antd'; import FormdataWrapper from "../utils/object-to-formdata-custom"; import { getToken } from "./token"; import { queryApiActionPath, queryOauthActionPath, queryPermActionPath } from "../utils/queryConfig"; import { offline } from '../location/Toast' const codeMessage = { 200: '服务器成功返回请求的数据。', 201: '新建或修改数据成功。', 202: '一个请求已经进入后台排队(异步任务)。', 204: '删除数据成功。', 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。', 401: '用户没有权限(令牌、用户名、密码错误)。', 403: '用户得到授权,但是访问是被禁止的。', 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。', 406: '请求的格式不可得。', 410: '请求的资源被永久删除,且不会再得到的。', 422: '当创建一个对象时,发生一个验证错误。', 500: '服务器发生错误,请检查服务器。', 502: '网关错误。', 503: '服务不可用,服务器暂时过载或维护。', 504: '网关超时。', }; /** * 异常处理程序 */ var canReportError = true; const errorHandler = error => { const { response } = error; if (response && response.status) { const errorText = codeMessage[response.status] || response.statusText; notification.error({ message: `请求错误`, description:errorText, }); if (response.status === 401) { // @HACK /* eslint-disable no-underscore-dangle */ return window.g_app._store.dispatch({ type: 'login/loginout', }); } } else { if (canReportError) { notification.error({ message: `网络故障`, description: "请检查网络链接或联系管理员", }); canReportError = false; } } }; /** * 配置request请求时的默认参数 */ const umiRequest = extend({ errorHandler, // 默认错误处理 credentials: 'omit', // 默认请求是否带上cookie mode: 'cors', }); const getUrl = url => url.startsWith("/") ? url : "/" + url; export const request = (url, data, options = {}) => { const pp = { ...data, token: getToken() } for(let i in pp){ if(pp[i]==null)delete pp[i] } // 由于自动添加前缀 这里暂时修改getUrl(url) return umiRequest(url, { data: pp, // method: "POST", requestType: "form", ...options, }).then(response => { if (window.location.href.indexOf('/mobile') != -1) { if (response.errCode || response.errMsg) { offline(response.errMsg, 2) if (data.callback) data.callback(response) return } } if (!response) return; if (response.errCode || response.errMsg) { notification.error({ message: `请求错误`, description:response.errMsg, }); return; } if (response.errcode) { notification.error({ message: `请求错误`, description: response.errmsg, }); return; } canReportError = true return response; }) }; const setRequestConfig = (config) => { return (url, data, options = {}) => { if (Array.isArray(url)) { return Promise.all(url.map((ags) => { return request(ags[0], ags[1], Object.assign({}, ags[2], config)); })) } return request(url, data, { ...options, ...config }) } }; const createServerRequest = (config = {}) => { return setRequestConfig(config) }; export const uaaRequest = createServerRequest({ method: "POST", prefix: queryOauthActionPath() }); export const permRequest = createServerRequest({ method: "POST", prefix: queryPermActionPath() }); export const apiRequest = createServerRequest({ method: "POST", prefix: queryApiActionPath() }); export const getRequest = createServerRequest({ method: "GET", prefix: queryApiActionPath() }); export default request;