import axios from 'axios' | |
import { ElMessage } from 'element-plus' | |
import router from '@/router' | |
//test | |
const request = axios.create({ | |
// 关键:不要设置baseURL,或者设置为空字符串 | |
// 这样请求会发送到当前域名(8080),然后被代理转发到8081 | |
baseURL: process.env.VUE_APP_BASE_API || '/api', | |
timeout: 10000, | |
headers: { | |
// 'Content-Type': 'application/json' | |
} | |
}) | |
request.interceptors.request.use( | |
config => { | |
const token = localStorage.getItem('token') | |
console.log('📤 添加 token 到请求头:', token) | |
if (token) { | |
config.headers.Authorization = `Bearer ${token}` | |
} | |
console.log('🚀 发送请求:', config.method?.toUpperCase(), config.url) | |
console.log('📤 请求数据:', config.data) | |
console.log('🔍 VUE_APP_BASE_API:', process.env.VUE_APP_BASE_API) | |
console.log('🔍 VUE_APP_BACKEND:', process.env.VUE_APP_BACKEND) | |
return config | |
}, | |
error => { | |
console.error('❌ 请求错误:', error) | |
return Promise.reject(error) | |
} | |
) | |
request.interceptors.response.use( | |
response => { | |
console.log('✅ 响应成功:', response.status, response.data) | |
return response.data | |
}, | |
error => { | |
console.error('❌ 响应错误:', error) | |
if (error.response) { | |
const { status, data } = error.response | |
switch (status) { | |
case 401: | |
localStorage.removeItem('token') | |
localStorage.removeItem('isLoggedIn') | |
localStorage.removeItem('userInfo') | |
ElMessage.error('登录已过期,请重新登录') | |
router.push('/login') | |
break | |
case 403: | |
ElMessage.error('权限不足') | |
break | |
case 404: | |
ElMessage.error('API接口不存在') | |
console.error('❌ 请求的URL:', error.config.url) | |
break | |
case 500: | |
ElMessage.error('服务器内部错误') | |
break | |
default: | |
const errorMessage = data?.message || `请求失败 (${status})` | |
ElMessage.error(errorMessage) | |
} | |
} else if (error.request) { | |
ElMessage.error('无法连接到服务器,请检查网络') | |
} else { | |
ElMessage.error('请求配置错误') | |
} | |
return Promise.reject(error) | |
} | |
) | |
export default request |