Files
vf_react/src/utils/axiosConfig.js
zdl a5bc1e1ce3 fix: 优化错误处理,减少控制台噪音
- axiosConfig: 忽略 CanceledError 错误日志(组件卸载时的正常行为)
- socketService: 首次连接失败使用 warn 级别,后续重试使用 debug 级别
- useEventData: 添加防御性检查,防止 pagination 为 undefined 时崩溃

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-18 18:03:10 +08:00

71 lines
1.8 KiB
JavaScript

// src/utils/axiosConfig.js
// Axios 全局配置和拦截器
import axios from 'axios';
import { getApiBase } from './apiConfig';
import { logger } from './logger';
// 判断当前是否是生产环境
const isProduction = process.env.NODE_ENV === 'production';
// 配置基础 URL
const API_BASE_URL = getApiBase();
// 配置 axios 默认值
axios.defaults.baseURL = API_BASE_URL;
axios.defaults.withCredentials = true;
axios.defaults.headers.common['Content-Type'] = 'application/json';
/**
* 请求拦截器
* 自动记录所有请求日志
*/
axios.interceptors.request.use(
(config) => {
const method = config.method?.toUpperCase() || 'GET';
const url = config.url || '';
const data = config.data || config.params || null;
logger.api.request(method, url, data);
return config;
},
(error) => {
logger.api.error('REQUEST', 'Interceptor', error);
return Promise.reject(error);
}
);
/**
* 响应拦截器
* 自动记录所有响应/错误日志
*/
axios.interceptors.response.use(
(response) => {
const method = response.config.method?.toUpperCase() || 'GET';
const url = response.config.url || '';
const status = response.status;
const data = response.data;
logger.api.response(method, url, status, data);
return response;
},
(error) => {
// 忽略取消请求的错误(组件卸载时正常行为)
if (error.name === 'CanceledError' || axios.isCancel(error)) {
return Promise.reject(error);
}
const method = error.config?.method?.toUpperCase() || 'UNKNOWN';
const url = error.config?.url || 'UNKNOWN';
const requestData = error.config?.data || error.config?.params || null;
logger.api.error(method, url, error, requestData);
return Promise.reject(error);
}
);
export default axios;