From 62ec22a335fd5fe5591e7baf459d795ab8ee34c1 Mon Sep 17 00:00:00 2001 From: dash <1549469775@qq.com> Date: Wed, 3 Sep 2025 22:33:30 +0800 Subject: [PATCH] =?UTF-8?q?fix=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/development.sqlite3-shm | Bin 32768 -> 32768 bytes src/middlewares/ErrorHandler/index.js | 43 ++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/middlewares/ErrorHandler/index.js diff --git a/database/development.sqlite3-shm b/database/development.sqlite3-shm index e8d9ef559001896f529ae0a9a0fba79b9f91002a..005896d90f85968b9e5c239d9c28c992d68f53fb 100644 GIT binary patch delta 55 ucmZo@U}|V!;*@x#%K!!wIpqZftEMKhq_3NgEXWELoEWRjxMX8veLVnk`woZz delta 55 vcmZo@U}|V!;*@x#%K!o_6FKDtU8|-hMx?Ksk1WUv7MvKX%s78zV|_gUj5ZIO diff --git a/src/middlewares/ErrorHandler/index.js b/src/middlewares/ErrorHandler/index.js new file mode 100644 index 0000000..816dce4 --- /dev/null +++ b/src/middlewares/ErrorHandler/index.js @@ -0,0 +1,43 @@ +import { logger } from "@/logger" +// src/plugins/errorHandler.js +// 错误处理中间件插件 + +async function formatError(ctx, status, message, stack) { + const accept = ctx.accepts("json", "html", "text") + const isDev = process.env.NODE_ENV === "development" + if (accept === "json") { + ctx.type = "application/json" + ctx.body = isDev && stack ? { success: false, error: message, stack } : { success: false, error: message } + } else if (accept === "html") { + ctx.type = "html" + await ctx.render("error/index", { status, message, stack, isDev }) + } else { + ctx.type = "text" + ctx.body = isDev && stack ? `${status} - ${message}\n${stack}` : `${status} - ${message}` + } + ctx.status = status +} + +export default function errorHandler() { + return async (ctx, next) => { + // 拦截 Chrome DevTools 探测请求,直接返回 204 + if (ctx.path === "/.well-known/appspecific/com.chrome.devtools.json") { + ctx.status = 204 + ctx.body = "" + return + } + try { + await next() + if (ctx.status === 404) { + await formatError(ctx, 404, "Resource not found") + } + } catch (err) { + logger.error(err) + const isDev = process.env.NODE_ENV === "development" + if (isDev && err.stack) { + console.error(err.stack) + } + await formatError(ctx, err.statusCode || 500, err.message || err || "Internal server error", isDev ? err.stack : undefined) + } + } +}