[NestJs] Introduction to NestJs Error Handling & Expection filter

Throw expection from Controller:

复制代码
  @Put(':courseId')
  async updateCourse(
    @Param('courseId') courseId: string,
    @Body() changes: Partial<Course>,
  ): Promise<Course> {
    if (changes._id) {
      throw new BadRequestException('Cannot update course id');
    }

    return this.couresDB.updateCourse(courseId, changes);
  }
复制代码

Expection types: https://docs.nestjs.com/exception-filters#built-in-http-exceptions

 

We can create global reuseable expection filters:

src/filters/http-expections.filter.ts:

复制代码
import {
  ExceptionFilter,
  Catch,
  ArgumentsHost,
  HttpException,
} from '@nestjs/common';
import { Request, Response } from 'express';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    const status = exception.getStatus();

    response.status(status).json({
      statusCode: status,
      timestamp: new Date().toISOString(),
      path: request.url,
      createdBy: 'HttpExceptionFilter',
      errorMessage: exception.message.message,
    });
  }
}
复制代码

 

Using it for one single HTTP request:

复制代码
  @Put(':courseId')
  @UseFilters(new HttpExceptionFilter())
  async updateCourse(
    @Param('courseId') courseId: string,
    @Body() changes: Partial<Course>,
  ): Promise<Course> {
    if (changes._id) {
      throw new BadRequestException('Cannot update course id');
    }

    return this.couresDB.updateCourse(courseId, changes);
  }
复制代码

 

Using it for one controller's all HTTP Requests:

@Controller('courses')
@UseFilters(new HttpExceptionFilter())
export class CoursesController {

 

Using it for all global requests:

main.ts:

复制代码
import { NestFactory } from '@nestjs/core';

import { AppModule } from './app.module';
import { HttpExceptionFilter } from './filters/http-exception.filter';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  app.setGlobalPrefix('api');
  app.useGlobalFilters(new HttpExceptionFilter());

  await app.listen(9000);
}

bootstrap();
复制代码

 

posted @   Zhentiw  阅读(432)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-01-13 [React] Return a list of elements from a functional component in React
2016-01-13 [ES6] Objects vs Maps
点击右上角即可分享
微信分享提示