diff --git a/lib/decorators/on-event.decorator.ts b/lib/decorators/on-event.decorator.ts index 469a660c..d92827ac 100644 --- a/lib/decorators/on-event.decorator.ts +++ b/lib/decorators/on-event.decorator.ts @@ -1,6 +1,7 @@ import { extendArrayMetadata } from '@nestjs/common/utils/extend-metadata.util'; import { EVENT_LISTENER_METADATA } from '../constants'; import { OnEventOptions } from '../interfaces'; +import { Logger } from '@nestjs/common'; /** * `@OnEvent` decorator metadata @@ -32,10 +33,30 @@ export const OnEvent = ( options?: OnEventOptions, ): MethodDecorator => { const decoratorFactory = (target: object, key?: any, descriptor?: any) => { + const logger = new Logger('OnEvent'); + const originMethod = descriptor.value; + const metaKeys = Reflect.getOwnMetadataKeys(descriptor.value); + const metas = metaKeys.map(key => [ + key, + Reflect.getMetadata(key, descriptor.value), + ]); + descriptor.value = async function (...args: any[]) { + try { + await originMethod.call(this, ...args); + } catch (error) { + if (error instanceof Error) { + logger.error(error, error.stack); + } else { + logger.error(error); + } + } + }; + metas.forEach(([k, v]) => Reflect.defineMetadata(k, v, descriptor.value)); + extendArrayMetadata( - EVENT_LISTENER_METADATA, - [{ event, options } as OnEventMetadata], - descriptor.value, + EVENT_LISTENER_METADATA, + [{ event, options } as OnEventMetadata], + descriptor.value, ); return descriptor; };