创建自定义异常过滤器
在 NestJS 应用中,异常过滤器用于捕获和处理异常,然后返回一个统一的错误响应。以下是创建自定义异常过滤器的步骤:
1. 创建异常过滤器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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. 导入并注册异常过滤器
在主应用程序文件中注册异常过滤器,确保它能够捕获整个应用中的异常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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 捕获并处理。
1 2 3 4 5 6 7 8 9 10
| import { Get, Controller, HttpException, HttpStatus } from '@nestjs/common';
@Controller('user') export class UserController { @Get() findAll() { throw new HttpException('请求失败', HttpStatus.NOT_FOUND); } }
|
4. 页面结果
当异常被抛出并捕获后,客户端将收到以下格式的响应:
1 2 3 4 5 6 7
| { "success": false, "timestamp": "2024/9/14 00:36:01", "message": "请求失败", "code": 404, "path": "/user" }
|
总结
通过创建自定义的异常过滤器,我们可以统一处理 NestJS 应用中的异常,并返回一个清晰且一致的错误响应。这不仅提高了应用的健壮性,也使得前端开发者能够更容易地处理错误情况。