blob: 239e97ae4c1e05941ac31ef89cebbe83540da560 [file] [log] [blame]
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')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
console.log('🚀 发送请求:', config.method?.toUpperCase(), config.url)
console.log('📤 请求数据:', config.data)
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