반응형
NestJs에서는 exception 에러 class를 제공한다.
https://nestjs-doc.exceptionfound.com/globals.html
// controller
...
constructor(
private service: TestService
){}
@Get("test")
testGet{
this.service.throwMethod()
}
...
// test.service.ts
....
export class TestService{
throwMethod(){
throw new InternalServerErrorException("error!!")
}
}
...
위 구조는 controller에서 try-catch 처리를 하지 않아도 아래 내용이 client에 출력된다.
{"message":"error!!","error":"Internal Server Error","statusCode":500}
그러나 종종 client 출력이 아닌 throw를 통해 nest서버가 깨지는데, 그 이유는 async 단어 하나 때문이다.
// test.service.ts
....
export class TestService{
async throwMethod(){
throw new InternalServerErrorException("error!!")
}
}
...
위와 같이 서비스 메소드 앞에 async를 넣으면 try-catch없이는 그냥 throw를 뱉어버린다.
아래에서 상위 클래스(여기선 testGet)에서 케이스별 코드를 확인할수 있다.
// controller
...
constructor(
private service: TestService
){}
// async-await
@Get("test")
async testGet{
await this.service.throwMethod()
}
// Promise
@Get("test")
testGet{
return new Promise((resolve, reject) => {
this.service.throwMethod().catch((err) => reject(err));
});
}
...
// test.service.ts
....
export class TestService{
async throwMethod(){
throw new InternalServerErrorException("error!!")
}
}
...
이상입니다.
*코드가 깨지면 아래를 참조해주세요