nestjs
Exception Filter & Middleware
Exception Filter (예외 필터)
모든 예외 처리는 HttpException을 포함한다.
구현
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
const status = exception.getStatus();
// 필요하다면 로그 모니터링 코드 작성
response.status(status).json({
statusCode: status,
message: exception.message,
timestamp: new Date().toLocaleString(),
path: request.url,
});
}
}
// 만약 전역적으로 http 예외 필터를 적용하고 싶은 경우
// main.ts
app.useGlobalFilters(new HttpExceptionFilter())
Middleware (미들웨어)
Express에서 그대로 가져온 기능
클라이언트 사이드에서 요청을 넣으면 미들웨어를 거친 뒤에 라우트 핸들러로 전달된다.
구현
path: ‘*’ 이렇게 작성하면 app 모듈을 통하는 모든 라우트에 middleware를 전부 적용한다.
// 구현
@Injectable()
export class LogMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
const now = new Date();
console.log(`[${now.toLocaleString('kr')}] ${req.method} ${req.originalUrl}`);
next();
}
}
// 모듈 파일에서 적용
// app.module.ts
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LogMiddleware).forRoutes({
path: '*',
method: RequestMethod.ALL
});
}
}