const api = require('./api'); /** * 例子 */ // app.http.get(url.format({ // path方式 ... // }), { // header: { // ... // }, // data: { // ... // } // }).then(res => { // }) //.catch(err => { // }) var methods = { POST_METHOD: 'POST', DELETE_METHOD: 'DELETE', PUT_METHOD: 'PUT', GET_METHOD: 'GET' }; /** * 新增 * @param url * @param dataObj * @param args * @param successCallback * @param errorCallback * @param completeCallback */ function postJson(url, args) { return doAjax(url, methods.POST_METHOD, args); } /** * 删除 * @param url * @param dataObj * @param args * @param successCallback * @param errorCallback * @param completeCallback */ function deleteForm(url, args) { return doAjax(url, methods.DELETE_METHOD, args); } /** * 修改 * @param url * @param dataObj * @param args * @param successCallback * @param errorCallback * @param completeCallback */ function putJson(url, args) { return doAjax(url, methods.PUT_METHOD, args); } /** * 查询 * @param url * @param dataObj * @param args * @param successCallback * @param errorCallback * @param completeCallback */ function getForm(url, args) { return doAjax(url, methods.GET_METHOD, args); } /** * 执行上传 * @param url * @param method * @param dataObj * @param args * @param successCallback * @param errorCallback * @param completeCallback */ function doAjax(url, method, args) { // var headers = {}; // if (args != null && typeof (args.headers) != 'undefined' && args.headers != null) { // headers = args.headers; // } return new Promise((success, errorback) => { //构建请求Url var requestUrl = api.apis.url + url wx.request({ url: requestUrl, method: method, data: args.data || {}, header: args.header || {}, timeout: 50000, dataType: 'json', success: res => { if (res.statusCode == 200) { success(res) } else { errorback(res) var hintMsg = '网络错误' if (res.data && res.data.msg) { hintMsg = res.data.msg } wx.showToast({ title: hintMsg, icon: 'none' }) } }, fail: err => { wx.hideLoading({}) errorback(err) var hintMsg = '网络错误' if (err.data && err.data.msg) { hintMsg = err.data.msg } wx.showToast({ title: hintMsg + '(100)', icon: 'none' }) }, }) }) } /** * 检测是路径参数有重复值 * @param pathArgArray * @returns {boolean} */ function pathArgsHasSameValue(pathArgArray) { var tempArgIndex = 0; var tempArgs = pathArgArray[tempArgIndex]; for (var i = (tempArgIndex + 1), item; item = pathArgArray[i]; i++) { if (tempArgs == item) { throw new Error('参数' + item + '有重复值!!!'); } if (i == pathArgArray.length - 1) { tempArgs = pathArgArray[++tempArgIndex]; i = tempArgIndex; continue; } } } /** * 获取页面间传递的参数 * @param url */ function getParamsArg(url) { var params = url.split('?')[1]; var paramsObj = {}; if (typeof (params) == 'undefined' || params == null) { return paramsObj; } var paramsKVs = params.split('&'); for (var i = 0, item = null; item = paramsKVs[i++];) { var kvs = item.split('='); if (kvs.length == 1) { paramsObj[kvs[0]] = null; } if (kvs.length == 2) { paramsObj[kvs[0]] = decodeURI(kvs[1]); } } return paramsObj; } /** * 构建路径 * @param basePath 请求路径,{参数}, * @param pathArgs 替换的路径参数,不能重复 * @returns {*} */ function buildPath(basePath, pathArgs) { var path = basePath; if (!basePath || !(typeof (basePath) == 'string')) { throw new Error('basePath必须为字符串!!!'); } if (!pathArgs || !Array.isArray(pathArgs)) { throw new Error('pathArgs必须为数组!!!'); } var pathArgArray = basePath.match(/\{\w+\}/g); if (!pathArgArray) { return path; } pathArgsHasSameValue(pathArgArray); for (var i = 0, item; item = pathArgArray[i]; i++) { path = path.replace(item, pathArgs[i]); } return path; } /** * 通过form对象上传文件 * @param url * @param formData * @param args * @param successCallback * @param errorCallback * @param beforeCallback * @param completeCallback */ function postFile(url, path, name, args, successCallback, errorCallback, completeCallback) { var headers = {}; if (args != null && typeof (args.headers) != 'undefined' && args.headers != null) { headers = args.headers; } wx.uploadFile({ filePath: path, name: name, url: url, header: headers, success: function (response) { if (response.statusCode == 200) { successCallback(response.statusCode, response.data, args); } else { if (errorCallback && typeof (errorCallback) == 'function') { errorCallback(response.statusCode, response.data); } } }, fail: function (response) { if (errorCallback && typeof errorCallback == 'function') { errorCallback(response.statusCode, response.data) } }, complete: function () { if (completeCallback && typeof (completeCallback) == 'function') { completeCallback(); } } }) }; /** * Promise 上传文件 */ function upload(url, params) { return new Promise((success, errorback) => { var requestUrl = api.apis.url + url wx.uploadFile({ filePath: params.path, name: params.name, url: requestUrl, header: params.header, success: function (response) { console.log('success') if (response.statusCode == 200) { success(response.data); } else { errorback(response) if (typeof (response.data) != undefined) { try { var data = JSON.parse(response.data) wx.showToast({ title: data.msg, icon: 'none' }) } catch (err) { wx.showToast({ title: '网络错误', icon: 'error' }) } } else { wx.showToast({ title: '网络错误', icon: 'error' }) } } }, fail: function (response) { wx.hideLoading({}) try { if (typeof (response.data.msg) != undefined) { wx.showToast({ title: response.data.msg, icon: 'none' }) } else { wx.showToast({ title: '网络错误(100)', icon: 'error' }) } } catch (err) { wx.showToast({ title: '网络错误(100)', icon: 'error' }) } } }) }) } /** * xss 转义 * @param html * @returns {string} */ function escape(html) { return String(html || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&') .replace(//g, '>') .replace(/'/g, ''').replace(/"/g, '"'); } String.prototype.format = function (params) { let s = this for (let item in params) { let re = new RegExp('{' + item + '}', 'gm') s = s.replace(re, params[item]) } return s } module.exports = { post: postJson, delete: deleteForm, put: putJson, get: getForm, params: getParamsArg, path: buildPath, escape: escape, file: postFile, upload: upload, apis: api.apis }