目录
创建自定义异常过滤器
在 NestJS 应用中,异常过滤器用于捕获和处理异常,然后返回一个统一的错误响应。以下是创建自定义异常过滤器的步骤:
1. 创建异常过滤器
import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from "@nestjs/common";import { Request, Response } from 'express';
@Catch(HttpException)export class HttpFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp(); const request = ctx.getRequest<Request>(); const response = ctx.getResponse<Response>(); const status = exception.getStatus();
response.status(status).json({ success: false, timestamp: new Date().toLocaleString(), message: exception.message || '服务器错误', code: status, path: request.url, }); }}2. 导入并注册异常过滤器
在主应用程序文件中注册异常过滤器,确保它能够捕获整个应用中的异常。
import { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';import { ResponseInterceptor } from './common/response'; // 确保这里引入的是正确的响应拦截器import { HttpFilter } from './common/filter';
async function bootstrap() { const app = await NestFactory.create(AppModule);
// 注册响应拦截器 app.useGlobalInterceptors(new ResponseInterceptor());
// 注册错误过滤器 app.useGlobalFilters(new HttpFilter());
await app.listen(3000);}bootstrap();3. 使用异常过滤器
在控制器中抛出异常,异常将被 HttpFilter 捕获并处理。
import { Get, Controller, HttpException, HttpStatus } from '@nestjs/common';
@Controller('user')export class UserController { @Get() findAll() { // 模拟一个异常 throw new HttpException('请求失败', HttpStatus.NOT_FOUND); }}4. 页面结果
当异常被抛出并捕获后,客户端将收到以下格式的响应:
{ "success": false, "timestamp": "2024/9/14 00:36:01", "message": "请求失败", "code": 404, "path": "/user"}总结
通过创建自定义的异常过滤器,我们可以统一处理 NestJS 应用中的异常,并返回一个清晰且一致的错误响应。这不仅提高了应用的健壮性,也使得前端开发者能够更容易地处理错误情况。