You've already forked template-MP
新增:全量优化
This commit is contained in:
165
api/request.js
165
api/request.js
@@ -1,9 +1,46 @@
|
||||
import Request from '@/lib/luch-request/index.js'
|
||||
import tool from '@/common/utils/tool.js'
|
||||
|
||||
const baseUrl = import.meta.env.VITE_BASE_URL
|
||||
import Request from '@/lib/luch-request/index.js'
|
||||
|
||||
import tool from '@/common/utils/tool.js'
|
||||
|
||||
import EnvConfig from '@/common/utils/env.js'
|
||||
|
||||
|
||||
|
||||
|
||||
const baseUrl = EnvConfig.BASE_URL
|
||||
|
||||
const http = new Request()
|
||||
// 缓存存储
|
||||
const cache = new Map()
|
||||
// 缓存过期时间(毫秒),默认5分钟
|
||||
const CACHE_EXPIRATION = 5 * 60 * 1000
|
||||
// 缓存工具方法
|
||||
const cacheUtils = {
|
||||
// 生成缓存key
|
||||
generateKey(config) {
|
||||
return `${config.method}:${config.url}:${JSON.stringify(config.data || {})}:${JSON.stringify(config.params || {})}`
|
||||
},
|
||||
// 获取缓存
|
||||
get(key) {
|
||||
const cached = cache.get(key)
|
||||
if (!cached) return null
|
||||
// 检查是否过期
|
||||
if (Date.now() - cached.timestamp > CACHE_EXPIRATION) {
|
||||
cache.delete(key)
|
||||
return null
|
||||
}
|
||||
return cached.data
|
||||
},
|
||||
// 设置缓存
|
||||
set(key, data) {
|
||||
cache.set(key, {
|
||||
data,
|
||||
timestamp: Date.now(),
|
||||
})
|
||||
},
|
||||
// 清除缓存
|
||||
clear() {
|
||||
cache.clear()
|
||||
},
|
||||
// 清除指定缓存
|
||||
delete(key) {
|
||||
cache.delete(key)
|
||||
@@ -11,31 +48,115 @@ http.setConfig(config => {
|
||||
}
|
||||
/* 设置全局配置 */
|
||||
http.setConfig(config => {
|
||||
|
||||
config.header = { ...config.header }
|
||||
config.sslVerify = false
|
||||
config.baseURL = baseUrl
|
||||
return config
|
||||
})
|
||||
http.interceptors.request.use(
|
||||
async config => {
|
||||
config.header = { ...config.header }
|
||||
// 自动添加token
|
||||
const token = uni.getStorageSync('token')
|
||||
if (token) {
|
||||
config.header.Authorization = `Bearer ${token}`
|
||||
}
|
||||
// 添加通用请求头
|
||||
config.header['Content-Type'] = 'application/json'
|
||||
// 检查缓存
|
||||
if (config.method === 'GET' && config.cache !== false) {
|
||||
const cacheKey = cacheUtils.generateKey(config)
|
||||
const cachedData = cacheUtils.get(cacheKey)
|
||||
if (cachedData) {
|
||||
// 如果有缓存,直接返回缓存数据
|
||||
return Promise.resolve({
|
||||
data: cachedData,
|
||||
statusCode: 200,
|
||||
})
|
||||
}
|
||||
}
|
||||
return config
|
||||
|
||||
http.interceptors.response.use(response => {
|
||||
if (response.statusCode == 500 || response.statusCode == 404 || response.statusCode == 403) {
|
||||
console.error(response)
|
||||
return tool.alert('网络错误,请稍后重试')
|
||||
},
|
||||
config => {
|
||||
return Promise.reject(config)
|
||||
}
|
||||
)
|
||||
http.interceptors.response.use(
|
||||
response => {
|
||||
// 网络错误处理
|
||||
if (response.statusCode >= 500) {
|
||||
console.error('服务器错误:', response)
|
||||
tool.alert('服务器错误,请稍后重试')
|
||||
return Promise.reject(response)
|
||||
}
|
||||
if (response.statusCode === 404) {
|
||||
console.error('接口不存在:', response)
|
||||
tool.alert('接口不存在')
|
||||
return Promise.reject(response)
|
||||
}
|
||||
if (response.statusCode === 403) {
|
||||
console.error('无权限访问:', response)
|
||||
tool.alert('无权限访问')
|
||||
return Promise.reject(response)
|
||||
}
|
||||
// 未授权处理
|
||||
if (response.statusCode === 401 || response.data?.code === 401) {
|
||||
console.error('未授权或登录过期:', response)
|
||||
tool.alert('登录已过期,请重新登录')
|
||||
// 清除本地token
|
||||
uni.removeStorageSync('token')
|
||||
// 跳转到登录页
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({ url: '/pages/login/login' }) // 根据实际登录页路径调整
|
||||
}, 1500)
|
||||
return Promise.reject(response)
|
||||
}
|
||||
// 业务错误处理
|
||||
if (response.data && response.data.code !== undefined && response.data.code !== 200) {
|
||||
const message = response.data.message || response.data.msg || '业务错误'
|
||||
console.error('业务错误:', message)
|
||||
tool.alert(message)
|
||||
return Promise.reject(response)
|
||||
}
|
||||
// 成功响应
|
||||
if (response.statusCode === 200) {
|
||||
// 缓存GET请求的响应数据
|
||||
if (response.config && response.config.method === 'GET' && response.config.cache !== false) {
|
||||
const cacheKey = cacheUtils.generateKey(response.config)
|
||||
cacheUtils.set(cacheKey, response.data)
|
||||
}
|
||||
return Promise.resolve(response)
|
||||
} else {
|
||||
return Promise.reject(response)
|
||||
}
|
||||
},
|
||||
error => {
|
||||
console.error('请求失败:', error)
|
||||
if (error.errMsg) {
|
||||
// 网络错误
|
||||
tool.alert('网络连接失败,请检查网络')
|
||||
|
||||
if (response.statusCode == 401 || response.data.code == 401) {
|
||||
}
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
return Promise.resolve(response)
|
||||
} else {
|
||||
return Promise.reject(response)
|
||||
}
|
||||
})
|
||||
|
||||
} else {
|
||||
tool.alert('请求失败,请稍后重试')
|
||||
}
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
// 添加缓存功能到http实例
|
||||
http.cache = cacheUtils
|
||||
// 添加重试方法
|
||||
http.retry = async function (config, retries = 3, delay = 1000) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const attempt = async retryCount => {
|
||||
try {
|
||||
const response = await this.request(config)
|
||||
resolve(response)
|
||||
} catch (error) {
|
||||
if (retryCount <= 0) {
|
||||
reject(error)
|
||||
} else {
|
||||
// 延迟后重试
|
||||
setTimeout(() => {
|
||||
attempt(retryCount - 1)
|
||||
}, delay)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user