/* * @author gs * @date 2020/07/27 15:40 */ import { ArgumentsHost, Catch, ExceptionFilter, HttpException, HttpStatus, Logger } from '@nestjs/common'; import { TowifyError } from '../../base/error'; /** * Implementation of the ExceptionFilter. This filter works when an error been handled. * @see [Exception Filters](https://docs.nestjs.com/exception-filters) */ @Catch() export class AllExceptionsFilter implements ExceptionFilter { catch(exception: Error, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse(); const request = ctx.getRequest(); Logger.error(exception.stack); let status = exception instanceof HttpException ? exception.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR; if (exception instanceof TowifyError) { status = HttpStatus.OK; } const code = exception instanceof TowifyError ? exception.code : status; const { url } = request; const errorResponse = { code, timestamp: new Date().toISOString(), path: url, message: exception.message }; Logger.error(errorResponse); response.status(status).json(errorResponse); } }