diff --git a/src/exception.filter.ts b/src/exception.filter.ts new file mode 100644 index 0000000..c152392 --- /dev/null +++ b/src/exception.filter.ts @@ -0,0 +1,27 @@ +import { + ExceptionFilter, + Catch, + ArgumentsHost, + Logger, + HttpStatus, +} from '@nestjs/common'; +import {Request, Response} from 'express'; + +@Catch(Error) +export class HttpExceptionFilter implements ExceptionFilter { + private readonly logger = new Logger(HttpExceptionFilter.name); + public catch(exception: Error, host: ArgumentsHost): void { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + const request = ctx.getRequest(); + const status = HttpStatus.INTERNAL_SERVER_ERROR; + + this.logger.error(exception); + + response.status(status).json({ + statusCode: status, + timestamp: new Date().toISOString(), + path: request.url, + }); + } +} diff --git a/src/main.ts b/src/main.ts index 9181a16..f1a0fec 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,11 +4,17 @@ import {DocumentBuilder, SwaggerModule} from '@nestjs/swagger'; import {useContainer} from 'class-validator'; import {AppModule} from '@warp-core/app.module'; +import {HttpExceptionFilter} from '@warp-core/exception.filter'; async function bootstrap(): Promise { const appURL = '/graphql'; const localDocUrl = '/doc'; - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule, { + cors: { + origin: false, + }, + }); + app.useGlobalFilters(new HttpExceptionFilter()); app.useGlobalPipes(new ValidationPipe()); useContainer(app.select(AppModule), {fallbackOnErrors: true});