|
|
@@ -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,
|
|
|
},
|
|
|
});
|
|
|
}
|