# 请求发起封装

  • 页面跳转控制
  • 请求头设置
  • 不同响应码处理
  • 挂载到全局

# request.js

let isRedirecting = false; // 避免重复跳转

function request(options) {
  const app = getApp();
  const token = app.globalData.token || wx.getStorageSync('token'); // 获取 token

  // 设置请求 URL
  options.url = app.globalData.baseURL + options.url;

  // 如果有 token,添加到请求头
  if (token) {
    options.header = {
      ...options.header,
      'satoken': `${token}`,
    };
  }

  wx.request({
    ...options,
    success: res => {
      // 处理 401 未授权的情况
      if (res.data.code === 401) {
        if (!isRedirecting) {
          isRedirecting = true;
          console.warn('Token 已过期或无效');
          // 清除所有登录相关信息
          wx.removeStorageSync('token');
          wx.removeStorageSync('userInfo');
          wx.redirectTo({
            url: '/pages/login/login', // 跳转到登录页
          });
        }
      } else if (options.success) {
        options.success(res);
      }
    },
    fail: err => {
      console.error('请求失败:', err);
      wx.showToast({
        title: '请求失败,请检查网络',
        icon: 'none',
      });
      if (options.fail) {
        options.fail(err);
      }
    },
    complete: () => {
      isRedirecting = false; // 重置重定向标志
    },
  });
}

module.exports = {
  request,
};

# app.js

// app.js
const { request } = require('./utils/request.js')
App({
  onLaunch() {
  },
  globalData: {
    userInfo: null,
    baseURL: "http://localhost:8888"
  },
  request
})

# xxxxPage.js

不同页面调用

const app = getApp()

app.request({
      url: 'http://xxxxxxxxxx',
      method:'POST',
      data:{},
	  success: res=>{
          xxxxx
      }
})