# 请求发起封装
- 页面跳转控制
- 请求头设置
- 不同响应码处理
- 挂载到全局
# 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
}
})