// 引入状态码statusCode const statusCode = require('./statusCode') // 定义请求路径, BASEURL: 普通请求API; CBASEURL: 中台API,不使用中台可不引入CBASEURL const config = require('./config') // 定义默认参数 const defaultOptions = { data: {}, ignoreToken: false, form: false, } /** * 发送请求 * @params * method: 请求方式: POST/GET * url: 请求路径 * data: 请求参数 * ignoreToken: 是否忽略token验证 * form: 是否使用formData请求 */ function request(options) { // let _options = Object.assign(defaultOptions, options) let _options = { ...defaultOptions, ...options } let { method, url, data, ignoreToken, form, isShowLoding, timeout, header, useParams } = _options // 检查url是否为undefined if (!url) { console.error('请求URL不能为空'); return Promise.reject(new Error('请求URL不能为空')); } const app = getApp() // 设置请求头 if (form) { header = { 'content-type': 'application/x-www-form-urlencoded' } } else { header = { 'content-type': 'application/json' //自定义请求头信息 } } if (!timeout) { timeout = 60000 } if (!ignoreToken) { // 从全局变量中获取token let token = app.globalData.token header.Authorization = `Bearer ${token}` } header.tag = app.globalData.tag; header.appId = app.globalData.AppID; return new Promise((resolve, reject) => { // 获取最新的 BASEURL let currentBaseUrl = app.globalData.baseUrl || config.BASEURL; console.log("url:" + currentBaseUrl + url); if (isShowLoding) { wx.showLoading({ title: '通信中...', // 加载动画标题 mask: true, // 是否显示透明蒙层,防止触摸穿透 }); } let myUrl; if (url.startsWith('http')) { myUrl = url; } else { myUrl = currentBaseUrl + url; } // 如果 useParams 为 true,拼接查询参数 if (useParams && data) { const queryString = objToQueryString(data); // 使用上面定义的函数 myUrl += `?${queryString}`; // 拼接查询字符串 data = {}; // 请求体数据设为空 } wx.request({ url: myUrl, data, header, method, timeout: timeout, success: (res) => { let { statusCode: code } = res console.log("success statusCode:" + code); if (isShowLoding) { wx.hideLoading(); // 隐藏加载动画 } if (code === statusCode.SUCCESS) { if (res.data.code !== "0001") { // 统一处理请求错误 // showToast(res.data.errorMsg) reject(res.data) return } resolve(res.data) } else if (code === statusCode.EXPIRE) { app.globalData.token = '' showToast(`登录过期, 请重新刷新页面`) reject(res.data) } else { // showToast(`请求错误${url}, CODE: ${code}`) console.log("success 请求错误:" + code); reject(res.data) } console.log("success statusCode:1111111111"); }, fail: (err) => { console.log("Error " + err); if (isShowLoding) { wx.hideLoading(); // 隐藏加载动画 } // showToast(err.errMsg) reject(err) } }) }) } function objToQueryString(obj) { return Object.keys(obj) .map(key => { // 对键和值进行 URL 编码 return `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`; }) .join('&'); // 将所有键值对用 '&' 连接起来 } // 封装toast函数 function showToast(title, icon = 'none', duration = 2500, mask = false) { wx.showToast({ title: title || '', icon, duration, mask }); } function get(options) { return request({ method: 'GET', ...options }) } function post(options) { // url, data = {}, ignoreToken, form return request({ method: 'POST', ...options }) } module.exports = { request, get, post }