Просмотр исходного кода

fix: 修复 errorHandler 不处理非 Error 类型 throw 导致崩溃的问题

errorHandler 参数类型从 Error 改为 unknown,防止非 Error 对象(如 string、number)被 throw 时访问 .message 属性崩溃

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
ethanfly 1 день назад
Родитель
Сommit
ad8dd2db1b
1 измененных файлов с 13 добавлено и 8 удалено
  1. 13 8
      server/src/middleware/error.ts

+ 13 - 8
server/src/middleware/error.ts

@@ -23,32 +23,37 @@ export class AppError extends Error {
 }
 
 export function errorHandler(
-  err: Error | AppError,
+  err: unknown,
   _req: Request,
   res: Response,
   _next: NextFunction
 ): void {
-  if (err instanceof AppError) {
-    logger.warn(`AppError: ${err.message}`, { code: err.code, statusCode: err.statusCode });
-    res.status(err.statusCode).json({
+  // 处理非 Error 类型的 throw(如 throw 'string' 或 throw 123)
+  const normalizedError = err instanceof Error
+    ? err
+    : new AppError(String(err), HTTP_STATUS.INTERNAL_SERVER_ERROR, ERROR_CODES.UNKNOWN);
+
+  if (normalizedError instanceof AppError) {
+    logger.warn(`AppError: ${normalizedError.message}`, { code: normalizedError.code, statusCode: normalizedError.statusCode });
+    res.status(normalizedError.statusCode).json({
       success: false,
       error: {
-        code: err.code,
-        message: err.message,
+        code: normalizedError.code,
+        message: normalizedError.message,
       },
     });
     return;
   }
 
   // 未知错误
-  logger.error('Unexpected error:', err);
+  logger.error('Unexpected error:', normalizedError);
   res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({
     success: false,
     error: {
       code: ERROR_CODES.UNKNOWN,
       message: process.env.NODE_ENV === 'production' 
         ? 'Internal server error' 
-        : err.message,
+        : normalizedError.message,
     },
   });
 }