// 网络请求封装 // 按小程序运行环境自动切换后端地址: // - develop(开发者工具):连线上数据(本地 8080 被其他服务占用,且 localhost 受域名校验限制) // - trial/release(体验版/正式版):生产域名(需在微信公众平台配置为 request 合法域名) const API_HOSTS = { develop: 'https://lunar.neatcn.com', trial: 'https://lunar.neatcn.com', release: 'https://lunar.neatcn.com', }; function resolveBaseUrl() { try { const envVersion = wx.getAccountInfoSync().miniProgram.envVersion; return API_HOSTS[envVersion] || API_HOSTS.release; } catch (e) { return API_HOSTS.release; } } const BASE_URL = resolveBaseUrl(); // 请求拦截器 function request(options) { return new Promise((resolve, reject) => { // 获取 token const token = wx.getStorageSync('token'); wx.request({ url: BASE_URL + options.url, method: options.method || 'GET', data: options.data || {}, header: { 'Content-Type': 'application/json', 'Authorization': token ? `Bearer ${token}` : '', ...options.header, }, success: (res) => { if (res.statusCode === 200) { resolve(res.data); } else if (res.statusCode === 401) { // 未授权:清除失效 token,由页面引导重新登录 wx.removeStorageSync('token'); reject(new Error('未授权')); } else { reject(new Error(res.data.msg || '请求失败')); } }, fail: (err) => { console.error('请求失败:', err); reject(err); }, }); }); } // 上传文件 function uploadFile(options) { return new Promise((resolve, reject) => { const token = wx.getStorageSync('token'); wx.uploadFile({ url: BASE_URL + options.url, filePath: options.filePath, name: options.name || 'file', header: { 'Authorization': token ? `Bearer ${token}` : '', }, formData: options.formData || {}, success: (res) => { if (res.statusCode === 200) { resolve(JSON.parse(res.data)); } else { reject(new Error('上传失败')); } }, fail: reject, }); }); } module.exports = { request, uploadFile, BASE_URL, };