/** * 早安电台 — API 请求封装 * 支持 Promise、BaseURL 配置、自动附带 Token */ // 接口基础地址(预留占位符,对接后端时替换) //const API_BASE_URL = 'https://radio.sundynix.cn/api' const API_BASE_URL = 'http://192.168.0.184:8888' /** * 获取本地存储的 token */ function getToken() { return wx.getStorageSync('token') || '' } /** * 通用请求方法 * @param {Object} options * @param {string} options.url - 接口路径(不含 BaseURL) * @param {string} [options.method='GET'] - 请求方法 * @param {Object} [options.data] - 请求参数 * @param {Object} [options.header] - 自定义请求头 * @returns {Promise} */ function request(options) { return new Promise((resolve, reject) => { const token = getToken() wx.request({ url: `${API_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 && res.statusCode < 300) { resolve(res.data) } else if (res.statusCode === 401) { // Token 过期或未登录,跳转到登录 wx.removeStorageSync('token') wx.redirectTo({ url: '/pages/splash/index' }) reject(new Error('未授权,请重新登录')) } else { reject(new Error(res.data.message || `请求失败: ${res.statusCode}`)) } }, fail(err) { reject(new Error(err.errMsg || '网络请求失败')) } }) }) } /** * 快捷方法 */ function get(url, data) { return request({ url, method: 'GET', data }) } function post(url, data) { return request({ url, method: 'POST', data }) } function put(url, data) { return request({ url, method: 'PUT', data }) } function del(url, data) { return request({ url, method: 'DELETE', data }) } module.exports = { API_BASE_URL, request, get, post, put, del }