import { Provide } from "@midwayjs/core"; import { IMidwayKoaContext, IWebMiddleware, NextFunction } from "@midwayjs/koa"; import { logger } from "@certd/basic"; import { Result, TextException } from "@certd/lib-server"; @Provide() export class GlobalExceptionMiddleware implements IWebMiddleware { resolve() { return async (ctx: IMidwayKoaContext, next: NextFunction) => { const { url } = ctx; const startTime = Date.now(); logger.info("请求开始:", url); try { await next(); logger.info("请求完成:", url, Date.now() - startTime + "ms"); } catch (err) { if (err instanceof TextException) { delete err.stack; } logger.error("请求异常:", url, Date.now() - startTime + "ms", err); ctx.status = 200; if (err.code == null || typeof err.code !== "number") { err.code = 1; } ctx.body = Result.error(err.code, err.message, err.data); } }; } }