(error: any, context: string)
| 362 | } |
| 363 | |
| 364 | static handleError(error: any, context: string): string { |
| 365 | const timestamp = new Date().toISOString(); |
| 366 | const errorMessage = error?.message || '未知错误'; |
| 367 | const errorStack = error?.stack || ''; |
| 368 | |
| 369 | |
| 370 | console.error(`[${timestamp}] [${context}] 错误: ${errorMessage}`); |
| 371 | if (errorStack && process.env.NODE_ENV === 'development') { |
| 372 | console.error(`[${timestamp}] [${context}] 堆栈: ${errorStack}`); |
| 373 | } |
| 374 | |
| 375 | let userMessage = errorMessage; |
| 376 | if (error?.code === 'ENOENT') { |
| 377 | userMessage = '文件不存在或无法访问'; |
| 378 | } else if (error?.code === 'EACCES') { |
| 379 | userMessage = '权限不足,无法访问文件'; |
| 380 | } else if (error?.code === 'EMFILE' || error?.code === 'ENFILE') { |
| 381 | userMessage = '系统文件句柄不足,请稍后重试'; |
| 382 | } else if (error?.code === 'ENOSPC') { |
| 383 | userMessage = '磁盘空间不足'; |
| 384 | } else if (errorMessage.includes('timeout') || errorMessage.includes('超时')) { |
| 385 | userMessage = '操作超时,请检查网络连接'; |
| 386 | } else if (errorMessage.includes('network') || errorMessage.includes('网络')) { |
| 387 | userMessage = '网络连接失败,请检查网络设置'; |
| 388 | } |
| 389 | |
| 390 | return `❌ ${context}失败: ${userMessage}`; |
| 391 | } |
| 392 | } |
| 393 | |
| 394 | interface HttpResponse { |
no test coverage detected