NestJS는 예외 레이어(exceptions layer)가 내장되어 있어서, 애플리케이션 전체에서 처리되지 않은 예외를 처리할 수 있다
애플리케이션 (Application Code) 예외 처리
- O : Exception Filter 에서 처리하지 않는다
- X : Filter 에서 예외를 포착하여 적절한 사용자 친화적인 응답을 자동으로 보낸다
Global Exceptions Filter 생성
📔 src/middleware/exception/HttpExceptionsFilter.ts
→ @Catch() 데코레이터의 매개변수 목록을 비워, 처리되지 않은 모든 예외를 포착할 수 있다
import { ArgumentsHost
, Catch
, ExceptionFilter
, HttpException
, HttpStatus } from "@nestjs/common";
import { HttpAdapterHost } from "@nestjs/core";
@Catch()
export class HttpExceptionsFilter implements ExceptionFilter {
constructor(private readonly httpAdapterHost: HttpAdapterHost) { }
catch(exception: unknown, host: ArgumentsHost): void {
const { httpAdapter } = this.httpAdapterHost;
const ctx = host.switchToHttp();
const httpStatus =
exception instanceof HttpException
? exception.getStatus()
: HttpStatus.INTERNAL_SERVER_ERROR;
const responseBody = {
statusCode: httpStatus,
timestamp: new Date().toLocaleString(),
path: httpAdapter.getRequestUrl(ctx.getRequest()),
message: "Http Exceptions Filtering",
message1: "message1"
}
httpAdapter.reply(ctx.getResponse(), responseBody, httpStatus);
}
}
📔 src/main.ts
...
import { HttpExceptionsFilter } from '@src/middleware/exception/HttpExceptionsFilter'
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const httpAdapter = app.get(HttpAdapterHost);
app.useGlobalFilters(new HttpExceptionsFilter(httpAdapter));
...
await app.listen(port);
}
bootstrap();
참고 링크
'JavaScript > NestJS' 카테고리의 다른 글
[NestJS] Guard + JWT 구현하기 (0) | 2023.08.27 |
---|---|
[NestJS] Swagger 적용하기 (0) | 2023.08.21 |
[NestJS] TypeORM CRUD 생성하기 (User) (0) | 2023.08.21 |
[NestJS] 환경 변수 (config) 사용하기 (0) | 2023.08.20 |
[NestJS] Logging 하기 (0) | 2023.08.19 |