import { ArgumentsHost, Catch, ExceptionFilter, HttpStatus } from '@nestjs/common'; import { MicroServiceError } from './micro-service-error'; import { MicroServiceErrorResponseInterface } from './interfaces'; import { AppLogger } from '../logger'; import { HttpArgumentsHost } from '@nestjs/common/interfaces'; import { MicroServiceExceptionUtil } from './utils'; @Catch(Error) export class MicroServiceExceptionFilter implements ExceptionFilter { private readonly TAG: string = `${this.constructor.name}`; catch(exception: any, host: ArgumentsHost) { const ctx: HttpArgumentsHost = host.switchToHttp(); const response = ctx.getResponse(); let microServiceErrorResponse: MicroServiceErrorResponseInterface; if (exception instanceof MicroServiceError) { microServiceErrorResponse = MicroServiceExceptionUtil.buildMicroServiceErrorResponse(exception); } else { microServiceErrorResponse = MicroServiceExceptionUtil.buildUnknownErrorResponse(); } AppLogger.error(exception.stack, this.TAG); const status: number = microServiceErrorResponse.statusCode ? microServiceErrorResponse.statusCode : HttpStatus.INTERNAL_SERVER_ERROR; response .status(status) .json({ error: microServiceErrorResponse }); } }