request.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // 小程序网络请求封装
  2. // const baseURL = 'https://sit-kelamayi.4dage.com/api'; // 根据环境配置(本地测试)
  3. const baseURL = 'https://klmybwg.4dage.com/api'; // 根据环境配置(正式环境)
  4. /**
  5. * 封装wx.request
  6. * @param {Object} options 请求配置
  7. * @param {Boolean} options.useToken 是否使用token,默认false
  8. * @returns {Promise}
  9. */
  10. function request(options) {
  11. return new Promise((resolve, reject) => {
  12. const {
  13. url,
  14. method = 'GET',
  15. data = {},
  16. header = {},
  17. useToken = false
  18. } = options;
  19. // 设置默认请求头
  20. const defaultHeader = {
  21. 'Content-Type': 'application/json;charset=UTF-8',
  22. ...header
  23. };
  24. const app = getApp();
  25. // 如果需要使用token,则添加到请求头
  26. if (useToken) {
  27. let token = null;
  28. // 优先从全局数据获取token
  29. if (app && app.globalData && app.globalData.token) {
  30. token = app.globalData.token;
  31. } else {
  32. // 如果全局数据没有,尝试从本地存储获取
  33. token = wx.getStorageSync('token');
  34. }
  35. if (token) {
  36. defaultHeader['token'] = `${token}`;
  37. console.log('添加token到请求头:', token);
  38. } else {
  39. console.warn('需要token但未获取到token');
  40. }
  41. }
  42. // 完整的请求URL
  43. const fullUrl = url.startsWith('http') ? url : baseURL + url;
  44. console.log('发送请求:', {
  45. url: fullUrl,
  46. method,
  47. data
  48. });
  49. wx.request({
  50. url: fullUrl,
  51. method: method.toUpperCase(),
  52. data: data,
  53. header: defaultHeader,
  54. success: (res) => {
  55. console.log('请求成功:', res);
  56. // 统一处理响应数据
  57. const { data: responseData } = res;
  58. if (res.statusCode === 200) {
  59. // 根据后端返回的数据结构调整
  60. if (responseData.code === 200 || responseData.success === true) {
  61. resolve(responseData.data || responseData);
  62. } else if (responseData.code === 4008) {
  63. // 登录失效,提示并延迟跳转到用户页面
  64. console.log('登录失效,跳转到用户页面');
  65. wx.showToast({
  66. title: '未登录,即将跳转',
  67. icon: 'none',
  68. });
  69. wx.removeStorageSync('token');
  70. wx.removeStorageSync('userInfo');
  71. app.globalData.userInfo = null;
  72. app.globalData.token = null;
  73. // 延迟1秒后跳转到用户页面并触发自动登录
  74. setTimeout(() => {
  75. wx.switchTab({
  76. url: '/pages/user/index'
  77. });
  78. }, 1000);
  79. reject(new Error('登录失效,请重新登录'));
  80. } else {
  81. // 处理业务错误
  82. const errorMsg = responseData.message || responseData.msg || '请求失败';
  83. console.error('业务错误:', errorMsg);
  84. reject(new Error(errorMsg));
  85. }
  86. } else {
  87. reject(new Error(`HTTP ${res.statusCode}: ${res.errMsg || '网络错误'}`));
  88. }
  89. },
  90. fail: (error) => {
  91. console.error('请求失败:', error);
  92. let errorMsg = '网络错误';
  93. if (error.errMsg) {
  94. if (error.errMsg.includes('timeout')) {
  95. errorMsg = '请求超时';
  96. } else if (error.errMsg.includes('fail')) {
  97. errorMsg = '网络连接失败';
  98. }
  99. }
  100. reject(new Error(errorMsg));
  101. }
  102. });
  103. });
  104. }
  105. module.exports = {
  106. request,
  107. baseURL
  108. };