Nodejs Nestjs异常处理模块@nestjs/exceptions的使用

Nodejs Nestjs异常处理模块@nestjs/exceptions的使用
在NestJS中,[@nestjs](/user/nestjs)/exceptions模块提供了一套强大的异常处理机制。它允许你定义自定义异常,并通过全局异常处理器来捕获和处理这些异常。下面是如何使用[@nestjs](/user/nestjs)/exceptions模块的基本步骤。

1. 安装必要的包

首先,确保你的项目中已经安装了NestJS。如果没有,可以使用以下命令进行安装:

npm install [@nestjs](/user/nestjs)/core

2. 创建自定义异常

你可以创建自定义异常类,继承自HttpException或其子类。例如:

import { HttpException, HttpStatus } from '[@nestjs](/user/nestjs)/common';

export class CustomException extends HttpException {
  constructor() {
    super('This is a custom exception', HttpStatus.BAD_REQUEST);
  }
}

3. 抛出异常

在服务或控制器中抛出自定义异常:

import { Injectable } from '[@nestjs](/user/nestjs)/common';
import { CustomException } from './custom.exception';

@Injectable()
export class AppService {
  getHello(): string | never {
    throw new CustomException();
  }
}

4. 全局异常处理器

你可以创建一个全局异常处理器,用于捕获并处理所有未被捕获的异常。这通常在app.module.ts中完成:

import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '[@nestjs](/user/nestjs)/common';
import { Request, Response } from 'express';

@Catch(HttpException)
export class AllExceptionsFilter 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,
    });
  }
}

// 在AppModule中注册
import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '[@nestjs](/user/nestjs)/common';
import { APP_FILTER } from '[@nestjs](/user/nestjs)/core';

@Module({
  providers: [
    {
      provide: APP_FILTER,
      useClass: AllExceptionsFilter,
    },
  ],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    // 配置中间件等
  }
}

5. 使用内置异常

NestJS还提供了许多内置的HTTP异常类,如NotFoundExceptionUnauthorizedException等,可以直接使用:

import { UnauthorizedException } from '[@nestjs](/user/nestjs)/common';

throw new UnauthorizedException();

以上就是如何在NestJS中使用[@nestjs](/user/nestjs)/exceptions模块的基本方法。通过这种方式,你可以更有效地管理和处理应用程序中的错误和异常情况。


3 回复

在NestJS中,@nestjs/exceptions模块是处理异常和错误的强大工具。想象一下,你正在开发一个魔法世界的应用程序,每当巫师施展法术失败时,这个模块就会出现,优雅地处理那些飞来横祸的错误。

首先,确保你的项目中已经安装了@nestjs/exceptions。如果还没有,就用魔杖(命令行)施个咒语:npm install @nestjs/exceptionsyarn add @nestjs/exceptions

然后,在你的服务或控制器中,当法术(代码)出错时,你可以抛出一个自定义的异常。例如,如果你的巫师试图召唤一只不存在的生物,你可以这样做:

import { Injectable } from '@nestjs/common';
import { HttpException, HttpStatus } from '@nestjs/exceptions';

@Injectable()
export class MagicService {
  summon(creatureName: string) {
    if (creatureName === 'Unicorn') {
      // 成功召唤独角兽!
      return 'Summoned Unicorn!';
    } else {
      // 抛出一个异常,表示召唤失败
      throw new HttpException('Creature not found', HttpStatus.NOT_FOUND);
    }
  }
}

最后,在你的全局异常过滤器中,可以捕获这些异常,并以一种友好的方式返回给客户端。这样,即使法术失败,用户也能得到一个清晰的信息,知道发生了什么。

这就是@nestjs/exceptions的基本用法,让我们的魔法世界更加和谐!


在NestJS中,@nestjs/exceptions 模块提供了强大的异常处理功能,可以帮助你更好地管理和处理应用中的错误。下面是如何使用这个模块来创建和处理自定义异常的步骤:

1. 创建自定义异常

你可以通过继承内置的 HttpException 类来创建自己的异常类。

import { HttpException, HttpStatus } from '@nestjs/common';

export class CustomException extends HttpException {
  constructor(message: string) {
    super(message, HttpStatus.BAD_REQUEST);
  }
}

2. 在服务或控制器中抛出异常

当你需要抛出一个异常时,可以直接使用你在第一步中创建的自定义异常类。

import { Injectable } from '@nestjs/common';
import { CustomException } from './custom.exception';

@Injectable()
export class AppService {
  async someMethod() {
    // 抛出自定义异常
    throw new CustomException('这是一个自定义异常');
  }
}

3. 全局异常处理器

为了捕获并统一处理这些异常,你需要创建一个全局异常处理器。这可以通过实现 ExceptionFilter 接口来完成。

import {
  ExceptionFilter,
  Catch,
  ArgumentsHost,
  HttpException,
  HttpStatus,
} from '@nestjs/common';
import { CustomException } from './custom.exception';

@Catch(HttpException)
export class AllExceptionsFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    const request = ctx.getRequest();
    const status =
      exception instanceof CustomException
        ? exception.getStatus()
        : exception instanceof HttpException
        ? exception.getStatus()
        : HttpStatus.INTERNAL_SERVER_ERROR;

    response.status(status).json({
      statusCode: status,
      timestamp: new Date().toISOString(),
      path: request.url,
    });
  }
}

4. 注册全局异常处理器

最后,在你的主模块(通常是 app.module.ts)中注册这个全局异常处理器。

import { Module } from '@nestjs/common';
import { APP_FILTER } from '@nestjs/core';
import { AllExceptionsFilter } from './all-exceptions.filter';

@Module({
  providers: [
    {
      provide: APP_FILTER,
      useClass: AllExceptionsFilter,
    },
  ],
})
export class AppModule {}

以上就是如何在NestJS中使用 @nestjs/exceptions 模块来处理异常的基本流程。这样可以让你的应用更加健壮,并且能够更优雅地处理错误情况。

在NestJS中,@nestjs/exceptions模块用于统一处理应用程序中的异常。你可以创建自定义异常类继承HttpException,例如:

import { HttpException, HttpStatus } from '@nestjs/common';

export class CustomHttpException extends HttpException {
  constructor() {
    super('错误信息', HttpStatus.BAD_REQUEST);
  }
}

然后在服务或控制器中抛出这个异常:

throw new CustomHttpException();

最后,通过全局异常过滤器捕获并处理这些异常:

import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
import { CustomHttpException } from './custom-http.exception';

@Catch(CustomHttpException)
export class CustomExceptionFilter implements ExceptionFilter {
  catch(exception: CustomHttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    response.status(400).json({
      message: '错误信息',
    });
  }
}

注册此过滤器即可实现全局异常处理。

回到顶部