Client Side → Pipe → Route Handler → Filter → Client Side 과정을 거친다

 

NestJS는 예외 레이어(exceptions layer)가 내장되어 있어서, 애플리케이션 전체에서 처리되지 않은 예외를 처리할 수 있다

 

애플리케이션 (Application Code) 예외 처리

  • O : Exception Filter 에서 처리하지 않는다
  • X : Filter 에서 예외를 포착하여 적절한 사용자 친화적인 응답을 자동으로 보낸다

 


Global Exceptions Filter 생성

 

📔 src/middleware/exception/HttpExceptionsFilter.ts

@Catch() 데코레이터의 매개변수 목록을 비워, 처리되지 않은 모든 예외를 포착할 수 있다

import { ArgumentsHost
    , Catch
    , ExceptionFilter
    , HttpException
    , HttpStatus } from "@nestjs/common";
import { HttpAdapterHost } from "@nestjs/core";

@Catch()
export class HttpExceptionsFilter implements ExceptionFilter {
    constructor(private readonly httpAdapterHost: HttpAdapterHost) { }

    catch(exception: unknown, host: ArgumentsHost): void {
        const { httpAdapter } = this.httpAdapterHost;

        const ctx = host.switchToHttp();
        
        const httpStatus =
            exception instanceof HttpException
                ? exception.getStatus()
                : HttpStatus.INTERNAL_SERVER_ERROR; 
        
        const responseBody = {
            statusCode: httpStatus,
            timestamp: new Date().toLocaleString(),
            path: httpAdapter.getRequestUrl(ctx.getRequest()),
            message: "Http Exceptions Filtering",
            message1: "message1"
        }

        httpAdapter.reply(ctx.getResponse(), responseBody, httpStatus);
    }
}

 

📔 src/main.ts

	...
    
import { HttpExceptionsFilter } from '@src/middleware/exception/HttpExceptionsFilter'


async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const httpAdapter = app.get(HttpAdapterHost);
  app.useGlobalFilters(new HttpExceptionsFilter(httpAdapter));

	...

  await app.listen(port);
}
bootstrap();

 

Exception Layer Filtering

 


참고 링크

https://docs.nestjs.com/exception-filters

https://tristy.tistory.com/52

'JavaScript > NestJS' 카테고리의 다른 글

[NestJS] Guard + JWT 구현하기  (0) 2023.08.27
[NestJS] Swagger 적용하기  (0) 2023.08.21
[NestJS] TypeORM CRUD 생성하기 (User)  (0) 2023.08.21
[NestJS] 환경 변수 (config) 사용하기  (0) 2023.08.20
[NestJS] Logging 하기  (0) 2023.08.19

+ Recent posts