fucai-claim/src/utils/axios.ts

77 lines
1.9 KiB
TypeScript
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.

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