네스트는 애플리케이션 전체에서 처리되지 않은 모든 처리를 하는 예외 레이어가 내장되어 있다.
@nestjs/common
패키지는 HttpException
클래스를 제공한다.
import { Get, HttpException } from '@nestjs/common';
@Get()
async findAll() {
throw new HttpException('Not Found All', 400);
}
클라이언트가 해당 엔드포인트를 호출하면 응답은 다음과 같다.
{
statusCode: 400,
message: 'Not Found All'
}
HttpException
생성자는 응답을 결정하는 두 개의 필수 인수를 사용한다.
예시는 아래와 같다.
import { Get, HttpException } from '@nestjs/common';
@Get()
async findAll() {
throw new HttpException({
status: 400,
errorMessage: 'Not Found All'
}, 400);
}
{
status: 400,
errorMessage: 'Not Found All'
}
HttpException
는 async / await 함수 안에서 try / catch 와 사용하면 좋다.
// app.controller.ts
import { Controller, Get, HttpException } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
async findAll() {
try {
const result = await this.appService.findAll();
return result;
} catch (err) {
throw new HttpException(
{
status: err.status,
errorMessage: err.message,
},
err.status,
);
}
}
}
// app.service.ts
import { HttpException, Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
constructor() {}
async findAll() {
try {
const result = new Array(-1); // Invalid array length
return result;
} catch (err) {
throw new HttpException('Invalid array length', 400);
}
}
}
app.service.ts
에 에러 코드를 작성하였다.
서비스에서 throw된 에러는 app.controller.ts
의 catch 문이 잡아낸다.
이때 서비스에서 보낸 statusCode는 err.status에 message는 err.message에 들어가 있다.
네스트의 Exception filters
는 모든 throw 에러를 잡아낼 수 있는 클래스이다.
귀하가 제공한 정보는 우리의 관심을 끌었습니다. 이 비밀을 알려주셔서 감사합니다. 사무실이나 교실에서 진부한 느낌이 든다면 저희 게임을 플레이하고 몸과 마음을 재충전하세요. 감사합니다! https://cookieclicker-games.com