123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // 小程序网络请求封装
- // 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
- };
|