Files
electron-4/src/renderer/src/axios/index.ts
2025-09-11 20:51:39 +08:00

114 lines
2.8 KiB
TypeScript

import router from '@renderer/router'
import axios from 'axios'
import type {
AxiosInstance,
AxiosRequestConfig,
AxiosResponse,
InternalAxiosRequestConfig
} from 'axios'
const pendingRequests = new Map<string, AbortController>()
let baseURL: any
if (window && window.process && window.process.type === 'renderer') {
// baseURL = localStorage.getItem('ip') ||'http://192.168.110.25:8848'|| 'http://127.0.0.1:8808'
baseURL = 'http://127.0.0.1:8848'
} else {
baseURL = 'http://192.168.110.25:8848'
}
// 创建自定义配置的axios实例
const service: AxiosInstance = axios.create({
baseURL: baseURL,
timeout: 10000,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
}
})
// 生成请求唯一标识
function getRequestKey(config: AxiosRequestConfig): string {
return `${config.url}`
}
// 请求拦截器
service.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
const key = getRequestKey(config)
// 检查是否有相同请求正在进行
if (pendingRequests.has(key)) {
ElMessage({
message: '当前请求已存在,请稍后再试',
type: 'warning'
})
}
const controller = new AbortController()
config.signal = controller.signal
pendingRequests.set(key, controller)
// 在这里添加认证token
const token = localStorage.getItem('Authorization')
console.log("localStorage.getItem('Authorization')", token);
if (token && config.headers) {
// Bearer
config.headers.Authorization = `${token}`
}
return config
},
(error) => {
return Promise.reject(error)
}
)
// 响应拦截器
service.interceptors.response.use(
(response: AxiosResponse) => {
const key = getRequestKey(response.config)
pendingRequests.delete(key)
console.log(response);
// 统一处理HTTP状态码
if (response.status === 200) {
if ([0, 200].includes(response.data.code)) {
return response
}
if (response.data.code == 401) {
router.push('/')
localStorage.removeItem('Authorization')
}
if (![0, 200].includes(response.data.code)) {
ElMessage({
message: response.data.msg || response.data.message,
type: 'error'
})
}
}
return Promise.reject(new Error('Error'))
},
(error) => {
console.log('error', error)
if (error.config) {
const key = getRequestKey(error.config)
pendingRequests.delete(key)
}
// 统一错误处理
const { response } = error
if (response) {
return Promise.reject(response)
}
ElMessage({
message: '网络连接异常,请稍后再试',
type: 'error'
})
return Promise.reject(new Error('网络连接异常,请稍后再试'))
}
)
export default service