Files
MyfronyProject/src/services/apiService.js
qingfeng1121 ede67faafd feat: 优化前端布局和代理配置
refactor: 移除调试日志并优化代码结构
style: 调整响应式设计和UI细节
fix: 修复路由和导航相关的问题
2025-12-12 17:14:04 +08:00

80 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 基础API服务
import axios from 'axios'
import { ElMessage } from 'element-plus'
// 创建axios实例
const api = axios.create({
baseURL: '/api', // API基础URL使用相对路径通过Vite代理转发
timeout: 10000, // 请求超时时间
withCredentials: true // 允许跨域请求携带凭证如cookies
})
// 请求拦截器
api.interceptors.request.use(
config => {
// 从localStorage获取token
let token = localStorage.getItem('token')
if (token) {
// 确保不重复添加Bearer前缀
if (!token.startsWith('Bearer ')) {
config.headers['Authorization'] = `Bearer ${token}`
} else {
config.headers['Authorization'] = token
}
}
return config
},
error => {
// 请求错误处理
console.error('请求错误:', error)
return Promise.reject(error)
}
)
// 响应拦截器
api.interceptors.response.use(
response => {
// 直接返回响应数据
return response.data
},
error => {
// 错误处理
console.error('响应错误:', error)
let message = '请求失败'
if (error.response) {
// 服务器响应了但状态码不是2xx
switch (error.response.status) {
case 401:
message = '未授权,请重新登录'
// 可以在这里处理登出逻辑
localStorage.removeItem('token')
// 跳转到登录页
window.location.href = '/login'
break
case 403:
message = '拒绝访问'
break
case 404:
message = '请求资源不存在'
break
case 500:
message = '服务器错误'
break
default:
message = error.response.data?.message || message
}
} else if (error.request) {
// 请求已发出但没有收到响应
message = '网络错误,请检查网络连接'
}
// 使用Element Plus的消息组件显示错误信息
ElMessage.error(message)
return Promise.reject(error)
}
)
export default api