推荐答案
NestJS 提供了强大的异常处理机制,主要通过 Exception Filters 来处理应用程序中的异常。NestJS 内置了许多常见的 HTTP 异常类,如 BadRequestException、NotFoundException 等,开发者也可以自定义异常类。异常过滤器可以捕获这些异常,并根据需要返回特定的 HTTP 响应。
如何使用异常过滤器
内置异常类:NestJS 提供了多种内置的异常类,开发者可以直接抛出这些异常。例如:
throw new BadRequestException('Invalid input');自定义异常类:开发者可以通过继承
HttpException类来创建自定义异常类。例如:export class CustomException extends HttpException { constructor() { super('Custom error message', 400); } }全局异常过滤器:可以通过
@Catch()装饰器创建全局异常过滤器,捕获所有未处理的异常。例如:// www.javascriptcn.com code example @Catch() export class AllExceptionsFilter implements ExceptionFilter { catch(exception: unknown, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse(); const request = ctx.getRequest(); const status = exception instanceof HttpException ? exception.getStatus() : 500; response.status(status).json({ statusCode: status, timestamp: new Date().toISOString(), path: request.url, }); } }应用异常过滤器:可以在控制器、方法或全局范围内应用异常过滤器。例如:
@UseFilters(new AllExceptionsFilter()) @Controller('cats') export class CatsController {}
本题详细解读
异常处理机制的核心概念
NestJS 的异常处理机制基于 Exception Filters,它允许开发者在应用程序中捕获和处理异常。异常过滤器可以捕获同步和异步代码中的异常,并根据需要返回特定的 HTTP 响应。
内置异常类
NestJS 提供了多种内置的 HTTP 异常类,这些异常类继承自 HttpException。常见的异常类包括:
BadRequestException:400 错误UnauthorizedException:401 错误NotFoundException:404 错误InternalServerErrorException:500 错误
这些异常类可以直接在代码中抛出,NestJS 会自动处理并返回相应的 HTTP 响应。
自定义异常类
如果内置的异常类不能满足需求,开发者可以通过继承 HttpException 类来创建自定义异常类。自定义异常类可以定义特定的错误消息和状态码。
全局异常过滤器
全局异常过滤器可以捕获应用程序中所有未处理的异常。通过实现 ExceptionFilter 接口,开发者可以自定义异常处理逻辑。全局异常过滤器通常用于捕获未预期的异常,并返回统一的错误响应。
应用异常过滤器
异常过滤器可以应用在控制器、方法或全局范围内。通过 @UseFilters() 装饰器,开发者可以指定特定的异常过滤器来处理特定范围的异常。全局异常过滤器通常通过 app.useGlobalFilters() 方法进行注册。
异常处理流程
- 抛出异常:在代码中抛出异常,可以是内置异常类或自定义异常类。
- 捕获异常:异常过滤器捕获抛出的异常。
- 处理异常:根据异常类型和过滤器逻辑,生成并返回相应的 HTTP 响应。
- 返回响应:将处理后的响应返回给客户端。
通过这种机制,NestJS 提供了灵活且强大的异常处理能力,帮助开发者构建健壮的应用程序。