77 lines
1.9 KiB
TypeScript
77 lines
1.9 KiB
TypeScript
import axios from 'axios'
|
||
|
||
// 从环境变量获取API基础路径
|
||
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api';
|
||
|
||
// 创建axios实例
|
||
const request = axios.create({
|
||
baseURL: API_BASE_URL, // 根据环境变量配置
|
||
timeout: 60000, // 请求超时时间 60秒
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
},
|
||
})
|
||
|
||
// 请求拦截器
|
||
request.interceptors.request.use(
|
||
(config) => {
|
||
// 可以在这里添加token等认证信息
|
||
const token = localStorage.getItem('token')
|
||
if (token) {
|
||
config.headers.Authorization = `Bearer ${token}`
|
||
}
|
||
return config
|
||
},
|
||
(error) => {
|
||
return Promise.reject(error)
|
||
}
|
||
)
|
||
|
||
// 响应拦截器
|
||
request.interceptors.response.use(
|
||
(response) => {
|
||
if(response.data.code == 200){
|
||
return response.data;
|
||
}else{
|
||
return Promise.reject(response.data);
|
||
}
|
||
},
|
||
(error) => {
|
||
// 错误处理
|
||
console.error('API请求错误:', error)
|
||
|
||
// 可以根据错误状态码进行不同的处理
|
||
if (error.response) {
|
||
switch (error.response.status) {
|
||
case 401:
|
||
// 未授权,清除token并跳转到登录页
|
||
localStorage.removeItem('token')
|
||
// 这里可以添加跳转登录页的逻辑
|
||
break
|
||
case 403:
|
||
alert('没有权限访问该资源')
|
||
break
|
||
case 404:
|
||
alert('请求的资源不存在')
|
||
break
|
||
case 500:
|
||
alert('服务器内部错误')
|
||
break
|
||
default:
|
||
alert(`请求错误: ${error.response.data.message || '未知错误'}`)
|
||
}
|
||
} else if (error.request) {
|
||
// 请求已发出但没有收到响应
|
||
alert('网络错误,请检查网络连接')
|
||
} else {
|
||
// 请求配置出错
|
||
alert('请求配置错误')
|
||
}
|
||
|
||
return Promise.reject(error)
|
||
}
|
||
)
|
||
|
||
// 导出常用的请求方法
|
||
export default request
|
||
export const { get, post, put, delete: del } = request |