import { ExceptionFilter, Catch, ArgumentsHost, HttpException, } from '@nestjs/common'; import { Response } from 'express'; // In case of exception in middleware run before the CORS middleware (eg: JSON Middleware that checks the request body), // the CORS headers are missing in the response. // This class add CORS headers to exception response to avoid misleading CORS error @Catch() export class ApplyCorsToExceptions implements ExceptionFilter { catch(exception: any, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse(); if (!response.header) { return; } response.header('Access-Control-Allow-Origin', '*'); response.header( 'Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE', ); response.header( 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept', ); const status = exception instanceof HttpException ? exception.getStatus() : 500; response.status(status).json(exception.response); } }