Files
AIGC/demo/frontend/src/api/request.js

72 lines
1.8 KiB
JavaScript
Raw Normal View History

2025-10-21 16:50:33 +08:00
import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'
// 创建axios实例
const api = axios.create({
baseURL: 'http://localhost:8080/api',
timeout: 900000, // 增加到15分钟适应视频生成时间
2025-10-21 16:50:33 +08:00
withCredentials: true,
headers: {
'Content-Type': 'application/json'
}
})
// 请求拦截器
api.interceptors.request.use(
(config) => {
// 使用JWT认证添加Authorization头
const token = sessionStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
(error) => {
console.error('请求拦截器错误:', error)
return Promise.reject(error)
}
)
// 响应拦截器
api.interceptors.response.use(
(response) => {
// 直接返回response让调用方处理data
return response
2025-10-21 16:50:33 +08:00
},
(error) => {
if (error.response) {
const { status, data } = error.response
switch (status) {
case 401:
ElMessage.error('未授权,请重新登录')
sessionStorage.removeItem('token')
sessionStorage.removeItem('user')
// 使用Vue Router进行路由跳转避免页面刷新
router.push('/login')
break
case 403:
ElMessage.error('权限不足')
break
case 404:
ElMessage.error('请求的资源不存在')
break
case 500:
ElMessage.error('服务器内部错误')
break
default:
ElMessage.error(data?.message || '请求失败')
2025-10-21 16:50:33 +08:00
}
} else if (error.request) {
2025-10-21 16:50:33 +08:00
ElMessage.error('网络错误,请检查网络连接')
} else {
ElMessage.error('请求配置错误')
2025-10-21 16:50:33 +08:00
}
return Promise.reject(error)
}
)
export default api