인프런 커뮤니티 질문&답변

특별한 까치님의 프로필 이미지
특별한 까치

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

Exception Filter

exception.getStatus is not a function 에러가 자주 납니다.

작성

·

571

0

안녕하세요.

http-exception.filter.ts에서 에러가 자주납니다.

보면 항상 

============================

/Users/gzeromin/Desktop/workspace/공부/인프런/zerocho-slack/backend/dist/main.js:3160

        const status = exception.getStatus();

                                 ^

 

TypeError: exception.getStatus is not a function

    at HttpExceptionFilter.catch (/Users/gzeromin/Desktop/workspace/공부/인프런/zerocho-slack/backend/dist/main.js:3160:34)

    at ExceptionsHandler.invokeCustomFilters (/Users/gzeromin/Desktop/workspace/공부/인프런/zerocho-slack/backend/node_modules/@nestjs/core/exceptions/exceptions-handler.js:33:26)

    at ExceptionsHandler.next (/Users/gzeromin/Desktop/workspace/공부/인프런/zerocho-slack/backend/node_modules/@nestjs/core/exceptions/exceptions-handler.js:13:18)

    at /Users/gzeromin/Desktop/workspace/공부/인프런/zerocho-slack/backend/node_modules/@nestjs/core/router/router-proxy.js:13:35

    at processTicksAndRejections (node:internal/process/task_queues:96:5)

==================

이런 에러가 나고요..

제가 강의를 단기간에 빨리 듣는게 아니라

오랜기간에 걸쳐 가끔씩 들어서 전에는 뭣때문에 이 에러가 났는지는 기억이 안나는데

그때는 씨드데이터가 없었나? 그래서 워크스페이스를 가져오면 널이니까 데이터를 못찾았다는 에러가 났나

그래서 에러를 던져주는데 그걸 저 필터에서 받아오면 항상 스테이터스를 제대로 못가져오고 백엔드서버가 터집니다.

<그때는 씨드데이터를 넣어서 에러가 안나게 만드는 방법으로 해결했습니다. 그 외에 중복회원가입 에러 테스트했을때는 안터지고 getStatus가 잘 동작했습니다.>

타입을 보면 HttpException이라서 항상 getStatus가 가능할것같은데 왜 터지는걸까요?

이번에는 워크스페이스 멤버를 가져오려고 했는데 exception콘솔로그 찍어보면

<아직 워크스페이스 멤버는 한명도 없는 상태,>

=============

ForbiddenException: Forbidden resource

    at canActivateFn (/Users/gzeromin/Desktop/workspace/공부/인프런/zerocho-slack/backend/node_modules/@nestjs/core/router/router-execution-context.js:136:23)

    at runNextTicks (node:internal/process/task_queues:61:5)

    at processImmediate (node:internal/timers:437:9)

    at async /Users/gzeromin/Desktop/workspace/공부/인프런/zerocho-slack/backend/node_modules/@nestjs/core/router/router-execution-context.js:42:31

    at async /Users/gzeromin/Desktop/workspace/공부/인프런/zerocho-slack/backend/node_modules/@nestjs/core/router/router-proxy.js:9:17 {

  response: {

    statusCode: 403,

    message: 'Forbidden resource',

    error: 'Forbidden'

  },

  status: 403

}

=========

이렇게 나와서 이셉션도 맞는것같은데

getStatus함수를 못쓰는것같습니다.

 

이셉션은 맞는것같고 HttpException도 맞는것같은데

어쩔때는 되고 어쩔때는 안되고 어떻게 해결해야할지 모르겠습니다.

저 이셉션이 무슨 함수를 가지고있는지 어떻게 조사해야할지 모르겠어서 질문남깁니다.

 

감사합니다.

답변 2

0

감사합니다! 

@Catch(HttpException) 이거 자체를 안썼었네요

검색해봤을때 비슷한 내용 본거같은데 캐치 타입에 되어있길래 한건줄 알았어요

항상 꼼꼼하게 본다고 해도 뭔가 조금씩 자꾸 틀리네요ㅜ

답변 감사드립니다.

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

혹시 @Catch()로 인수가 비어있나요?

@Catch(HttpException) 해보세요.

특별한 까치님의 프로필 이미지
특별한 까치

작성한 질문수

질문하기