import type { RuntimeMode } from "../../shared/api"; import type { Logger } from "../logger"; import { createApiError, jsonResponse } from "../helpers"; type RouteHandler = (req: Request) => Promise | Response; export class AppError extends Error { constructor( message: string, readonly statusCode: number, ) { super(message); this.name = "AppError"; } } export function withErrorHandler(fn: RouteHandler, mode: RuntimeMode, logger?: Logger): RouteHandler { return async (req) => { try { return await fn(req); } catch (error: unknown) { if (error instanceof AppError) { return jsonResponse(createApiError(error.message, error.statusCode), { mode, status: error.statusCode, }); } logger?.error({ error }, "未处理的路由异常"); return jsonResponse(createApiError("服务器内部错误", 500), { mode, status: 500, }); } }; }