6. Nest.js 광부왕 게임 서버

1. src/common/filters/error.exception.ts 파일 생성

error.exceptions.ts 파일을 만들고 적절한 코드를 붙여넣습니다.

  • 1. 개발 중 발생하는 오류를 분기하여 처리하고 개발 서버에서만 확인하도록 console.log()로 오류 값을 표시합니다.
  • 2. 오류 메시지는 String과 Object 두 가지 타입으로 나오므로 타입을 확인하고 분기를 처리한다.

import {
  ExceptionFilter,
  Catch,
  ArgumentsHost,
  HttpException,
} from '@nestjs/common';
import { Response, Request } from 'express';
@Catch()
export class ErrorExceptionFilter implements ExceptionFilter {
  catch(exception: unknown, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    const status =
      exception instanceof HttpException ? exception.getStatus() : 500;
    // 1. dev 개발서버 실행 일 때 에러 발생 시 로그 출력
    if (process.env.NODE_ENV === 'dev') {
      console.log('Error : ' + exception);
    }
    // 2. 에러 메시지가 String, Object 두 형태로 전달되기 때문에 분기 처리
    const error =
      exception instanceof HttpException
        ? (exception.getResponse() as
            | string
            | { error: string; statusCode: number; message: string | string() })
        : 'Internal server error';

    if (typeof error === 'string') {
      response.status(status).json({
        result: false,
        statusCode: status,
        method: request.method,
        path: request.url,
        error,
      });
    } else {
      response.status(status).json({
        result: false,
        statusCode: status,
        method: request.method,
        path: request.url,
        ...error,
      });
    }
  }
}