inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Comment Count 작업하기

http Exception filter 적용

130

SJ

작성한 질문수 155

0

http Exception filter 적용이 안됩니다.

 

 

import {
  ArgumentsHost,
  Catch,
  ExceptionFilter,
  HttpException,
} from '@nestjs/common';
import { Response } from 'express';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    console.log('exception', exception);
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const status = exception.getStatus();
    const err = exception.getResponse() as
      | string
      | { error: string; statusCode: number; message: string | string[] };
    console.log('err', err);
    if (typeof err !== 'string' && err.error === 'Bad Request') {
      return response.status(status).json({
        ok: false,
        statusCode: status,
        data: err.message,
      });
    }

    response.status(status).json({
      ok: false,
      statusCode: status,
      data: err,
    });
  }
}

위처럼 하고난뒤에
main.ts 파일에
app.useGlobalFilters(new HttpExceptionFilter());

추가했는데 위처럼 에러 포맷이 안나옵니다.
const foundUser = await this.dataSource.getRepository(UserEntity).findOne({ where: { id } });
if (!foundUser) { console.log('User not found'); throw new BadRequestException('User not found'); }
{

"response": {

"message": "User not found",

"error": "Bad Request",

"statusCode": 400

},

"status": 400,

"options": {},

"message": "User not found",

"name": "BadRequestException"

}

javascript typescript rest-api nestjs backend

답변 2

0

코드팩토리

안녕하세요!

말씀주신 내용으로는 문맥을 전혀 파악 할 수 없습니다.

Filter에 진입은 되는 상황이신건가요?

감사합니다!

0

SJ

아 Filter 에 진입이 전혀 안되더라고요
console.log 로 출력해봤는데 로그가 안찍혀요

검색도 해봐서 방은으로

main.ts 에서 추가

app.module.ts 추가를 각각 시도해봤는데도 안되더라고요 ㅠ

0

코드팩토리

다른곳에서 이미 에러를 잡고있는건 아닌가요?

한번 잡힌 에러는 다시 잡히지 않습니다.

0

SJ

혹시 몰라서 확인해봤는데 그런건 아닌것 같습니다.

제가 모르고 있을수도 있는데 ,

다른곳으로 진입이 된다고 하면 어떻게 확인하면 될까요 ??

 

http exception filter 부분 로그와

스크린샷 2024-11-29 오후 4.21.43.png

 

main.ts 파일에서
app.useGlobalFilters(new HttpExceptionFilter());

셋팅은 이렇게 했습니다.

0

코드팩토리

안녕하세요!

제가 직접 봐드리는게 나을 것 같습니다.

레포지토리 깃헙에 올려서 링크 주시면 확인 해보겠습니다.

감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. SJ님.

NestJS에서 HTTP Exception Filter를 적용하여 에러 응답 형식을 커스텀하고자 하셨네요. 에러 포맷이 의도와 다르게 동작할 때 주로 발생하는 문제와 해결 방법을 아래에 공유드립니다.

  1. 전역 필터 등록 확인: 먼저, app.useGlobalFilters(new HttpExceptionFilter());를 통해 Exception Filter가 메인 애플리케이션의 전역으로 적용되어 있는지 확인해보셔야 합니다. 이 대목은 이미 잘 설정하신 것 같습니다.

  2. 필터에서의 예외 처리: HttpException 클래스에서 제공하는 getResponse()getStatus() 메소드가 호출되어 올바른 상태와 응답을 반환하는지 로그 등을 통해 확인하는 것이 좋습니다. catch 메소드 내부의 console.log를 통해 예외가 발생했을 시 로그가 출력되는지 확인해보세요. 로그가 출력되지 않는다면 필터가 적용되지 않았을 수도 있습니다.

  3. 배포 환경의 문제: 개발 환경과 배포 환경에서 설정의 차이가 있는지 확인하세요. 배포된 환경에서는 main.ts의 설정이 다르게 되어 있을 수 있습니다.

  4. NestJS 버전 확인: 혹시 NestJS의 버전이 강의와 다르다면, 필터 등록 방식이나 작동 방식에 차이가 있을 수 있습니다. 이를 확인 후 NestJS 공식 문서를 참조하시거나, NestJS 공식 가이드라인을 따라 버전에 맞는 설정을 확인해 주세요.

  5. 커스텀 필터 코드 논리 확인: 특히 err가 문자열이 아닌 경우에 대한 처리가 예외를 잘 잡아내고 있는지 확인해야 합니다. 현재의 로직은 err.error가 ‘Bad Request’일 때만 별도 처리를 하고 있습니다. 다른 케이스도 고려하여 처리할 수 있도록 논리를 수정해 보세요.

이외에도 유사한 문제에 대한 다른 학습자들의 경험이 도움이 될 수 있습니다. 다음 유사한 주제의 Q&A 링크를 참조해 보시기 바랍니다:

혹시 문제 해결이 계속 어렵다면, 강의의 Q&A 게시판을 통해 더 많은 정보를 공유하시고, 다른 경험이 있는 학습자나 강사님의 도움을 받아 보시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cascade 질문

0

44

1

@types/bcrypt 설치과정이 누락된것같습니다.

0

53

1

process.env port key 에러

0

51

1

추상화

0

52

1

[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상

0

105

2

where 키워드가 들어가는 메서드와 아닌 메서드

0

57

1

BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?

0

74

1

app.controller app.service 는 지워도되나요?

0

70

1

@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이

0

81

1

포트 3000에서 listen하는 곳까지 넘어가지 않습니다.

0

69

1

PickType 사용 시 `as const`를 꼭 사용해야 하나요?

0

105

2

socket connect 오류

0

101

2

강의를 들으면서 궁금한 점

0

100

2

DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?

0

64

2

커리큘럼 질문

0

101

2

put 요청은 언제

0

92

3

typeorm VS prisma

0

355

2

142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.

0

79

2

User 데코레이터 버그 수정 전달드립니다.

0

70

1

git 주소 부탁드립니다.

0

115

2

nest g resource 명령어 에러

0

99

2

로그인 엔드포인트 관련 질문

0

86

2

yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우

0

150

3

"흔히 사용되는 메서드" 강의 관련 질문입니다~

0

95

2