blob: 01da8a30f448a5fe37c59a7b85daad65e90a609d [file] [log] [blame]
Xing Jinwenff16b1e2025-06-05 00:29:26 +08001import axios from 'axios'
2import { ElMessage } from 'element-plus'
3import router from '@/router'
vulgar5201cb5ad602025-06-05 19:13:38 +08004//test
Xing Jinwenff16b1e2025-06-05 00:29:26 +08005const request = axios.create({
6 // 关键:不要设置baseURL,或者设置为空字符串
7 // 这样请求会发送到当前域名(8080),然后被代理转发到8081
20815951548db5f2a2025-06-09 23:58:33 +08008 baseURL: process.env.VUE_APP_BASE_API || '',
Xing Jinwenff16b1e2025-06-05 00:29:26 +08009 timeout: 10000,
10 headers: {
vulgar5201ef2b41e2025-06-05 19:09:44 +080011 // 'Content-Type': 'application/json'
Xing Jinwenff16b1e2025-06-05 00:29:26 +080012 }
13})
14
15request.interceptors.request.use(
16 config => {
17 const token = localStorage.getItem('token')
20815951548db5f2a2025-06-09 23:58:33 +080018 console.log('📤 Token长度:', token ? token.length : 0)
19 console.log('📤 Token前50字符:', token ? token.substring(0, 50) + '...' : 'null')
20
Xing Jinwenff16b1e2025-06-05 00:29:26 +080021 if (token) {
20815951548db5f2a2025-06-09 23:58:33 +080022 // 检查token是否过大
23 if (token.length > 8000) {
24 console.warn('⚠️ Token过大,长度:', token.length)
25 // 清除过大的token
26 localStorage.removeItem('token')
27 localStorage.removeItem('tokenInfo')
28 localStorage.removeItem('userInfo')
29 localStorage.removeItem('isLoggedIn')
30 ElMessage.error('登录信息过大,请重新登录')
31 router.push('/login')
32 return Promise.reject(new Error('Token过大'))
33 }
Xing Jinwenff16b1e2025-06-05 00:29:26 +080034 config.headers.Authorization = `Bearer ${token}`
35 }
36
37 console.log('🚀 发送请求:', config.method?.toUpperCase(), config.url)
38 console.log('📤 请求数据:', config.data)
Xing Jinwenff16b1e2025-06-05 00:29:26 +080039
40 return config
41 },
42 error => {
43 console.error('❌ 请求错误:', error)
44 return Promise.reject(error)
45 }
46)
47
48request.interceptors.response.use(
49 response => {
50 console.log('✅ 响应成功:', response.status, response.data)
51 return response.data
52 },
53 error => {
54 console.error('❌ 响应错误:', error)
55
56 if (error.response) {
57 const { status, data } = error.response
58
59 switch (status) {
60 case 401:
61 localStorage.removeItem('token')
62 localStorage.removeItem('isLoggedIn')
63 localStorage.removeItem('userInfo')
64 ElMessage.error('登录已过期,请重新登录')
65 router.push('/login')
66 break
67 case 403:
68 ElMessage.error('权限不足')
69 break
70 case 404:
71 ElMessage.error('API接口不存在')
72 console.error('❌ 请求的URL:', error.config.url)
73 break
20815951548db5f2a2025-06-09 23:58:33 +080074 case 431:
75 console.error('❌ 请求头太大 (431),可能是Token过大')
76 localStorage.removeItem('token')
77 localStorage.removeItem('tokenInfo')
78 localStorage.removeItem('userInfo')
79 localStorage.removeItem('isLoggedIn')
80 ElMessage.error('登录信息过大,请重新登录')
81 router.push('/login')
82 break
Xing Jinwenff16b1e2025-06-05 00:29:26 +080083 case 500:
84 ElMessage.error('服务器内部错误')
85 break
86 default:
87 const errorMessage = data?.message || `请求失败 (${status})`
88 ElMessage.error(errorMessage)
89 }
90 } else if (error.request) {
91 ElMessage.error('无法连接到服务器,请检查网络')
92 } else {
93 ElMessage.error('请求配置错误')
94 }
95
96 return Promise.reject(error)
97 }
98)
99
100export default request