import axios from 'axios'; // 创建axios实例 const service = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL, timeout: 10000, // 请求超时时间 }); // 请求拦截器 service.interceptors.request.use( config => { const token = localStorage.getItem('token'); if (token) { config.headers['Authorization'] = `Bearer ${token}`; } // 对于有 body 的请求(POST、PUT、PATCH),确保设置 Content-Type if (config.data && ['post', 'put', 'patch'].includes(config.method?.toLowerCase())) { if (!config.headers['Content-Type'] && !config.headers['content-type']) { config.headers['Content-Type'] = 'application/json'; } } return config; }, error => { return Promise.reject(error); } ); // 响应拦截器 service.interceptors.response.use( response => { return response.data; }, error => { if (error.response) { switch (error.response.status) { case 401: // 处理未授权的错误 - 清除token并跳转登录页 console.error('未授权,请重新登录'); localStorage.removeItem('token'); // 避免循环导入,直接使用路由 if (window.location.hash !== '#/login') { window.location.href = '#/login'; } break; case 404: // 处理资源不存在的错误 console.error('请求的资源不存在'); break; default: console.error('请求失败,请稍后再试'); } } else if (error.request) { console.error('请求失败,请检查网络连接'); } else { console.error('请求配置错误'); } return Promise.reject(error); } ); export default service;