const { BASE_URL } = require('./config.js'); const TOKEN_KEY = 'pets_token'; function getToken() { return wx.getStorageSync(TOKEN_KEY) || ''; } function setToken(t) { wx.setStorageSync(TOKEN_KEY, t); } function clearToken() { wx.removeStorageSync(TOKEN_KEY); } // 统一请求:注入 token,解析 {code,message,data},成功返回 data,失败 reject(Error) function request({ url, method = 'GET', data, header = {} }) { return new Promise((resolve, reject) => { const token = getToken(); wx.request({ url: BASE_URL + url, method, data, header: Object.assign( { 'Content-Type': 'application/json' }, token ? { Authorization: 'Bearer ' + token } : {}, header, ), success(res) { const body = res.data; if (body && typeof body === 'object' && 'code' in body) { if (body.code === 0) return resolve(body.data); if (body.code === 40100) clearToken(); return reject(new Error(body.message || '请求失败')); } resolve(body); }, fail(err) { reject(new Error((err && err.errMsg) || '网络错误')); }, }); }); } // 文件上传(multipart) function uploadFile(filePath) { return new Promise((resolve, reject) => { const token = getToken(); wx.uploadFile({ url: BASE_URL + '/api/upload', filePath, name: 'file', header: token ? { Authorization: 'Bearer ' + token } : {}, success(res) { try { const body = JSON.parse(res.data); if (body.code === 0) return resolve(body.data); reject(new Error(body.message || '上传失败')); } catch (e) { reject(new Error('上传响应解析失败')); } }, fail(err) { reject(new Error((err && err.errMsg) || '上传失败')); }, }); }); } module.exports = { request, uploadFile, getToken, setToken, clearToken };