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>
This commit is contained in:
zdl
2025-12-18 18:03:10 +08:00
parent 2ce74b4331
commit a5bc1e1ce3
3 changed files with 27 additions and 10 deletions

View File

@@ -92,9 +92,18 @@ class SocketService {
// 监听连接错误
this.socket.on('connect_error', (error) => {
this.reconnectAttempts++;
logger.error('socketService', 'connect_error', error, {
attempts: this.reconnectAttempts,
// 首次连接失败使用 warn 级别,后续使用 debug 级别减少日志噪音
if (this.reconnectAttempts === 1) {
logger.warn('socketService', `Socket 连接失败,将在后台重试`, {
url: API_BASE_URL,
error: error.message,
});
} else {
logger.debug('socketService', `Socket 重连尝试 #${this.reconnectAttempts}`, {
error: error.message,
});
}
// 使用指数退避策略安排下次重连
this.scheduleReconnection();

View File

@@ -52,6 +52,11 @@ axios.interceptors.response.use(
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;

View File

@@ -52,18 +52,21 @@ export const useEventData = (filters, pageSize = 10) => {
total: response.data?.pagination?.total
});
if (response.success) {
setEvents(response.data.events);
if (response.success && response.data) {
const events = response.data.events || [];
const paginationData = response.data.pagination || {};
setEvents(events);
setPagination({
current: response.data.pagination.page,
pageSize: response.data.pagination.per_page,
total: response.data.pagination.total
current: paginationData.page || page,
pageSize: paginationData.per_page || pagination.pageSize,
total: paginationData.total || 0
});
setLastUpdateTime(new Date());
logger.debug('useEventData', 'loadEvents 成功', {
count: response.data.events.length,
total: response.data.pagination.total
count: events.length,
total: paginationData.total || 0
});
}
} catch (error) {