hldy_xcx/request/index.js

127 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 全局请求封装
// export const base_url = 'http://192.168.2.26:8081/opeapi'
export const base_url = 'https://www.focusnu.com/opeapi'
// 请求超出时间
const timeout = 5000
// 需要修改token和根据实际修改请求头
export default (params) => {
let url = params.url;
let method = params.method || "get";
let data = params.data || {};
let header = {
'X-Access-Token': uni.getStorageSync('token') || '',
'Content-Type': 'application/json;charset=UTF-8',
'Authorization': 'Basic c2FiZXI6c2FiZXJfc2VjcmV0',
...params.header
}
// 读取/写入 401 计数的辅助函数(保存在本地 Storage
const get401Count = () => {
const v = uni.getStorageSync('auth401Count')
return Number.isInteger(v) ? v : 0
}
const set401Count = (n) => {
uni.setStorageSync('auth401Count', n)
}
const reset401Count = () => {
uni.removeStorageSync('auth401Count')
}
return new Promise((resolve, reject) => {
uni.request({
url: base_url + url,
method: method,
header: header,
data: data,
timeout,
success(response) {
const res = response
if (res.statusCode == 200) {
// 成功则重置 401 计数
reset401Count()
resolve(res.data)
} else {
// 出现非 200 的情况,默认重置 401 计数(除非是 401我们单独处理
if (res.statusCode !== 401) {
reset401Count()
}
switch (res.statusCode) {
case 401: {
// 增加 401 计数
let count = get401Count() || 0
count = count + 1
set401Count(count)
// 如果累计小于 3保持旧逻辑清除本地存储并直接跳转自动重定向
if (count < 3) {
uni.clearStorageSync()
uni.reLaunch({
url: "/pages/login/callback",
})
} else {
// 累计 >= 3不要直接跳转弹框给用户让用户选择是否去登录
// 这里不自动跳转,只提示(用户点确认再跳转),可以根据需要调整文案
uni.showModal({
title: "登录异常",
content: "检测到多次未授权访问401请重新登录。",
confirmText: "去登录",
cancelText: "取消",
success(resModal) {
if (resModal.confirm) {
uni.clearStorageSync()
// 用户主动确认时再跳转
uni.reLaunch({
url: "/pages/login/callback",
})
} else {
// 用户取消:不跳转,保留当前状态(可选行为)
// 也可以在这里做其他处理,例如记录日志
}
}
})
}
// 这里不 resolve原来你的逻辑也没有 resolve直接返回
break
}
case 404:
uni.showToast({
title: '请求地址不存在...',
icon: "error",
duration: 2000,
})
break;
default:
uni.showToast({
title: '请重试...',
icon: "error",
duration: 2000,
})
break;
}
// 把整个非 200 的响应 reject 出去,方便调用方做处理(可按需保留/删除)
reject(res)
}
},
fail(err) {
// 网络或其他异常,不改变 401 计数
if (err && err.errMsg && err.errMsg.indexOf('request:fail') !== -1) {
uni.showToast({
title: '网络异常',
icon: "error",
duration: 2000
})
} else {
uni.showToast({
title: '未知异常',
duration: 2000
})
}
reject(err);
}
})
})
}