// 小程序网络请求封装 // const baseURL = 'https://sit-kelamayi.4dage.com/api'; // 根据环境配置(本地测试) const baseURL = 'https://klmybwg.4dage.com/api'; // 根据环境配置(正式环境) /** * 封装wx.request * @param {Object} options 请求配置 * @param {Boolean} options.useToken 是否使用token,默认false * @returns {Promise} */ function request(options) { return new Promise((resolve, reject) => { const { url, method = 'GET', data = {}, header = {}, useToken = false } = options; // 设置默认请求头 const defaultHeader = { 'Content-Type': 'application/json;charset=UTF-8', ...header }; const app = getApp(); // 如果需要使用token,则添加到请求头 if (useToken) { let token = null; // 优先从全局数据获取token if (app && app.globalData && app.globalData.token) { token = app.globalData.token; } else { // 如果全局数据没有,尝试从本地存储获取 token = wx.getStorageSync('token'); } if (token) { defaultHeader['token'] = `${token}`; console.log('添加token到请求头:', token); } else { console.warn('需要token但未获取到token'); } } // 完整的请求URL const fullUrl = url.startsWith('http') ? url : baseURL + url; console.log('发送请求:', { url: fullUrl, method, data }); wx.request({ url: fullUrl, method: method.toUpperCase(), data: data, header: defaultHeader, success: (res) => { console.log('请求成功:', res); // 统一处理响应数据 const { data: responseData } = res; if (res.statusCode === 200) { // 根据后端返回的数据结构调整 if (responseData.code === 200 || responseData.success === true) { resolve(responseData.data || responseData); } else if (responseData.code === 4008) { // 登录失效,提示并延迟跳转到用户页面 console.log('登录失效,跳转到用户页面'); wx.showToast({ title: '未登录,即将跳转', icon: 'none', }); wx.removeStorageSync('token'); wx.removeStorageSync('userInfo'); app.globalData.userInfo = null; app.globalData.token = null; // 延迟1秒后跳转到用户页面并触发自动登录 setTimeout(() => { wx.switchTab({ url: '/pages/user/index' }); }, 1000); reject(new Error('登录失效,请重新登录')); } else { // 处理业务错误 const errorMsg = responseData.message || responseData.msg || '请求失败'; console.error('业务错误:', errorMsg); reject(new Error(errorMsg)); } } else { reject(new Error(`HTTP ${res.statusCode}: ${res.errMsg || '网络错误'}`)); } }, fail: (error) => { console.error('请求失败:', error); let errorMsg = '网络错误'; if (error.errMsg) { if (error.errMsg.includes('timeout')) { errorMsg = '请求超时'; } else if (error.errMsg.includes('fail')) { errorMsg = '网络连接失败'; } } reject(new Error(errorMsg)); } }); }); } module.exports = { request, baseURL };