From 987a51466c8619247789e90dadeb23c47bf20b2b Mon Sep 17 00:00:00 2001 From: GEEKiDoS Date: Mon, 8 Jan 2024 21:03:38 +0800 Subject: [PATCH] move global exception handler to top middleware --- src/main.ts | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/main.ts b/src/main.ts index 47e18e3..fa75ecc 100644 --- a/src/main.ts +++ b/src/main.ts @@ -19,7 +19,7 @@ function tryResolve(token: InjectionToken): T | undefined { function register( token: InjectionToken, - provider: Provider | { new (...args: any[]): T }, + provider: Provider | { new(...args: any[]): T }, ): T { if (container.isRegistered(token)) return container.resolve(token); @@ -31,6 +31,19 @@ async function main(): Promise { const logger = new Logger('main'); const app = new Koa() + .use(async (ctx, next) => { + try { + await next(); + } catch (e) { + logger.error( + 'unexcepted error: %s', + JSON.stringify(e, Object.getOwnPropertyNames(e), 2), + ); + + ctx.status = e.status ?? 500; + ctx.body = `${e.stack ?? 'Internal Error'}`; + } + }) .use(binaryBody) .use(crypto) .use(decompress) @@ -48,8 +61,8 @@ async function main(): Promise { ctx.service = ctx.query.f; ctx.logger = ctx.service ? register(`logger:${ctx.service}`, { - useValue: new Logger(ctx.service), - }) + useValue: new Logger(ctx.service), + }) : logger; let service: ILaochanService | undefined = ctx.service @@ -84,18 +97,8 @@ async function main(): Promise { JSON.stringify(ctx.request.body), ); - try { - ctx.body = await service.process(ctx); - ctx.status = 200; - } catch (e) { - logger.error( - 'unexcepted error: %s', - JSON.stringify(e, Object.getOwnPropertyNames(e), 2), - ); - - ctx.status = e.status ?? 500; - ctx.body = `${e.stack ?? 'Internal Error'}`; - } + ctx.body = await service.process(ctx); + ctx.status = 200; logger.info('%s [server]: status = %d', ctx.service, ctx.status); return await next();