해결된 질문
작성
·
288
0
HttpExceptionFilter에서 에러처리시
exception.getStatus() 로 err 변수값을 넣을떄
HttpException 의 경우 string 타입
BadRequestException, UnauthorizedException 와 같이 미리 정의된 경우 { message: any; statusCode: number } 타입
class-validator의 경우 { error: string; statusCode: 400; message: string[] } 타입의 3가지 형태가 되는데
이번강의에서 string 타입 자체를 제거하셧는데 HttpException 를 사용하게되면 에러 메시지가 제대로 안 날라 가게 됩니다.
class-validator를 도입하면서 HttpException 케이스를 제거 하신거 같은데 해당 예외도 포함은 되어있어야 하지 않나요?
class-validator 가 완전히 HttpException 를 대체하게 한다면 HttpException를 사용못하게 막을 방법이 있을까요?
import {
ExceptionFilter,
Catch,
ArgumentsHost,
HttpException,
} from '@nestjs/common';
import { Response } from 'express';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const status = exception.getStatus();
const err = exception.getResponse() as
| string
| { message: any; statusCode: number }
| { error: string; statusCode: 400; message: string[] };
//class-validator
if (typeof err !== 'string' && err.statusCode === 400) {
return response.status(status).json({
success: false,
code: err.statusCode,
data: err.message,
});
}
//HttpException
if (typeof err == 'string') {
return response.status(status).json({
success: false,
code: status,
data: err,
});
}
//BadRequestException, UnauthorizedException
return response.status(status).json({
success: false,
code: status,
data: err.message,
});
}
}