NestJS에서 HTTP 예외를 사용자 정의하는 방법
응답은 당연합니다. 에서 응답과 오류를 잘 처리하여 논리를 처리하려면 서버에서는 항상 표준화된 형태의 객체로 응답/오류를 전해주어야 합니다.
현재 진행 중인 프로젝트에서는 다음과 같은 수신 양식을 지켜보고 있습니다. 읽기가 난다면 다음과 같은 형식으로 내려간다.
{
"status" : 401, // Http Status Code
"code" : "UNAUTHORIZED_USER" // string Response code
"error" : true // is error occurred?
"message" : "권한이 없습니다." // message for request,
"data" : // response data, original error object
}
하지만, NestJS의 기능 중에는 다음과 같은 기능이 존재한다.
export class SomethingDto {
@IsNotEmpty()
field : number
}
를 사용한 Validation과,
throw new UnauthorizedException(object, 'description');
과 같은 NestJS가 지원하는 HttpException 이다.
비슷한 기능을 사용하면서 NestJS가 자동으로 던지는 응답(에러)객체는 다음과 같이 된다
{
"statusCode" : HttpStatusCode,
"message" : string[],
"error" : string
}
따라서 프로젝트에서 사용하는 형식으로 응답을 반환해야 합니다.
사용하는 것이 처리 레이어를 두 가지 방식으로 하고 필터를 사용한다. 다음은 내가 사용한 방식이다.
광고가 가능하다면 언제든지 점을 가리키면 감사드린다.
@Catch()
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: Error, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const res = ctx.getResponse<Response>();
const req = ctx.getRequest<Request>();
}
if(!(exception instanceof HttpException)) {
exception = new HttpException(new ResponseDto(~~),
HttpStatus.Internal_Server_Error);
}
let response = (exception as HttpException).getResponse();
// 시스템이 자동으로 던진 에러에는 statusCode가 존재함.
if(response['statusCode']) {
// your transform response object
}
const log = {
timeStamp: new Date();
url: req.url;
response
};
Logger.error(long)
res.status((exception as
HttpException).getStatus()).json(response);
}
이렇게 이전에 main.ts에서 다음과 같이 사용했다.
// 중략
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(8080);
// 후략
이렇게 다음과 같이 근접한 시스템에서 던진 기계메세지에 잘 변형되어 내려왔습니다.
우회적으로 헤메이는 바로에게 힘이 되었으면 합니다.
참조
Reference
이 문제에 관하여(NestJS에서 HTTP 예외를 사용자 정의하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/phantolajang/how-to-customize-http-exception-in-nestjs-3ceo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)