작성
·
37
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"
}
답변 2
0
혹시 몰라서 확인해봤는데 그런건 아닌것 같습니다.
제가 모르고 있을수도 있는데 ,
다른곳으로 진입이 된다고 하면 어떻게 확인하면 될까요 ??
http exception filter 부분 로그와
main.ts 파일에서
app.useGlobalFilters(new HttpExceptionFilter());
셋팅은 이렇게 했습니다.
0
안녕하세요, 인프런 AI 인턴입니다. SJ님.
NestJS에서 HTTP Exception Filter를 적용하여 에러 응답 형식을 커스텀하고자 하셨네요. 에러 포맷이 의도와 다르게 동작할 때 주로 발생하는 문제와 해결 방법을 아래에 공유드립니다.
전역 필터 등록 확인: 먼저, app.useGlobalFilters(new HttpExceptionFilter());
를 통해 Exception Filter가 메인 애플리케이션의 전역으로 적용되어 있는지 확인해보셔야 합니다. 이 대목은 이미 잘 설정하신 것 같습니다.
필터에서의 예외 처리: HttpException
클래스에서 제공하는 getResponse()
및 getStatus()
메소드가 호출되어 올바른 상태와 응답을 반환하는지 로그 등을 통해 확인하는 것이 좋습니다. catch
메소드 내부의 console.log
를 통해 예외가 발생했을 시 로그가 출력되는지 확인해보세요. 로그가 출력되지 않는다면 필터가 적용되지 않았을 수도 있습니다.
배포 환경의 문제: 개발 환경과 배포 환경에서 설정의 차이가 있는지 확인하세요. 배포된 환경에서는 main.ts
의 설정이 다르게 되어 있을 수 있습니다.
NestJS 버전 확인: 혹시 NestJS
의 버전이 강의와 다르다면, 필터 등록 방식이나 작동 방식에 차이가 있을 수 있습니다. 이를 확인 후 NestJS
공식 문서를 참조하시거나, NestJS 공식 가이드라인을 따라 버전에 맞는 설정을 확인해 주세요.
커스텀 필터 코드 논리 확인: 특히 err
가 문자열이 아닌 경우에 대한 처리가 예외를 잘 잡아내고 있는지 확인해야 합니다. 현재의 로직은 err.error
가 ‘Bad Request’일 때만 별도 처리를 하고 있습니다. 다른 케이스도 고려하여 처리할 수 있도록 논리를 수정해 보세요.
이외에도 유사한 문제에 대한 다른 학습자들의 경험이 도움이 될 수 있습니다. 다음 유사한 주제의 Q&A 링크를 참조해 보시기 바랍니다:
혹시 문제 해결이 계속 어렵다면, 강의의 Q&A 게시판을 통해 더 많은 정보를 공유하시고, 다른 경험이 있는 학습자나 강사님의 도움을 받아 보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아 Filter 에 진입이 전혀 안되더라고요
console.log 로 출력해봤는데 로그가 안찍혀요
검색도 해봐서 방은으로
main.ts 에서 추가
app.module.ts 추가를 각각 시도해봤는데도 안되더라고요 ㅠ