UNPKG

axios-ali-adapter

Version:

axios支付宝小程序适配器,可以复用web或者node上的axios请求

142 lines (141 loc) 4.8 kB
var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; export const isDate = (val) => { return toString.call(val) === '[object Date]'; }; export const isJSONstr = (str) => { try { return (typeof str === 'string' && str.length && (str = JSON.parse(str)) && Object.prototype.toString.call(str) === '[object Object]'); } catch (error) { return false; } }; export const encode = (val) => { return encodeURIComponent(val) .replace(/%40/gi, '@') .replace(/%3A/gi, ':') .replace(/%24/g, '$') .replace(/%2C/gi, ',') .replace(/%20/g, '+') .replace(/%5B/gi, '[') .replace(/%5D/gi, ']'); }; /** 方法转换器 */ export const methodProcessor = (axiosMethod) => { const upperCaseMethod = axiosMethod.toUpperCase(); const repeatMethod = ['GET', 'POST', 'PUT', 'DELETE']; if (repeatMethod.includes(upperCaseMethod)) { return upperCaseMethod; } else { throw new Error(`阿里小程序暂不支持${axiosMethod}方法`); } }; /** url路径转换器 */ export const urlProcessor = (baseURL, path, params, paramsSerializer) => { let fullPath = /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(path) ? path : `${baseURL || ''}${path || ''}`; if (!params) { return fullPath; } const connector = fullPath.includes('?') ? '&' : '?'; let serializedParam; if (paramsSerializer) { serializedParam = paramsSerializer(params); return `${fullPath}${connector}${serializedParam}`; } if (typeof params === 'string') { serializedParam = params; } if (typeof params === 'object') { serializedParam = Object.keys(params) .reduce((prev, key) => { const value = params[key]; if (value === null || value === '') { return prev; } if (Array.isArray(value)) { value.forEach((item) => { prev.push(`${encode(key + '[]')}=${encode(item)}`); }); return prev; } if (isDate(value)) { prev.push(`${encode(key)}=${encode(value.toISOString())}`); return prev; } if (typeof value === 'object') { prev.push(`${encode(key)}=${encode(value.toString())}`); return prev; } prev.push(`${encode(key)}=${encode(value)}`); return prev; }, []) .join('&'); } return `${fullPath}${serializedParam ? connector : ''}${serializedParam}`; }; export const dataProcessor = (data) => { if (isJSONstr(data)) { return JSON.parse(data); } return data; }; /** 正确返回处理器 * 默认情况下 4xx、5xx请求在微信小程序中属于成功的返回 * 因此这里需要对successResult做一次判断过滤 * */ export const successResProcessor = (resolve, reject, res, config, request) => { const { data, status, headers, errorMessage } = res, restResult = __rest(res, ["data", "status", "headers", "errorMessage"]); const response = Object.assign({ data: data, status: status, statusText: errorMessage || 'request ok', headers: headers, config: config, request }, restResult); //保持和web逻辑一致 if (config.validateStatus && !config.validateStatus(status)) { const error = new Error(`Request failed with status code ${status}`); error.config = config; error.request = request; error.response = response; error.isAxiosError = true; reject(error); return; } resolve(response); }; /** 错误返回处理器 */ export const failResProcessor = (reject, res, config, request) => { const error = new Error(res.errMsg); error.config = config; error.request = request; error.response = res; error.isAxiosError = true; reject(error); }; export const headerProcessor = (header) => { if (header === null || header === void 0 ? void 0 : header.referer) { delete header.referer; } return header; }; export const dataTypeProcessor = (dataType) => { if (!dataType || dataType === 'json') { return 'json'; } if (dataType === 'text') { return 'text'; } return 'arraybuffer'; };