推荐答案
在 NestJS 中,过滤器(Filters)是一种用于处理应用程序中未捕获异常的机制。它们允许你在异常发生时,对异常进行自定义处理,例如记录日志、返回特定的错误响应等。过滤器可以应用于控制器、方法或全局范围。
创建过滤器
要创建一个过滤器,你需要实现 ExceptionFilter
接口,并使用 @Catch()
装饰器来指定要捕获的异常类型。过滤器类必须实现 catch(exception: T, host: ArgumentsHost)
方法,其中 T
是你想要捕获的异常类型。
-- -------------------- ---- ------- ------ - ---------------- ------ -------------- ------------- - ---- ----------------- ------ - -------- -------- - ---- ---------- --------------------- ------ ----- ------------------- ---------- --------------- - ---------------- -------------- ----- -------------- - ----- --- - -------------------- ----- -------- - ---------------------------- ----- ------- - -------------------------- ----- ------ - ---------------------- -------- --------------- ------- ----------- ------- ---------- --- --------------------- ----- ------------ --- - -
使用过滤器
过滤器可以通过以下几种方式使用:
- 控制器级别:使用
@UseFilters()
装饰器将过滤器应用于整个控制器。
@Controller('cats') @UseFilters(HttpExceptionFilter) export class CatsController { @Get() findAll() { throw new HttpException('Forbidden', HttpStatus.FORBIDDEN); } }
- 方法级别:使用
@UseFilters()
装饰器将过滤器应用于特定的方法。
@Controller('cats') export class CatsController { @Get() @UseFilters(HttpExceptionFilter) findAll() { throw new HttpException('Forbidden', HttpStatus.FORBIDDEN); } }
- 全局范围:使用
app.useGlobalFilters()
方法将过滤器应用于整个应用程序。
const app = await NestFactory.create(AppModule); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(3000);
本题详细解读
过滤器的概念
NestJS 的过滤器是一种异常处理机制,允许开发者在应用程序中捕获和处理未捕获的异常。通过过滤器,你可以自定义异常的处理逻辑,例如记录日志、返回特定的错误响应等。过滤器可以应用于不同的范围,包括控制器、方法或全局范围。
过滤器的创建
要创建一个过滤器,你需要实现 ExceptionFilter
接口,并使用 @Catch()
装饰器来指定要捕获的异常类型。过滤器类必须实现 catch(exception: T, host: ArgumentsHost)
方法,其中 T
是你想要捕获的异常类型。在这个方法中,你可以访问异常对象和请求上下文,并根据需要处理异常。
过滤器的使用
过滤器可以通过 @UseFilters()
装饰器应用于控制器或方法级别,也可以通过 app.useGlobalFilters()
方法应用于全局范围。在控制器或方法级别应用过滤器时,只有该控制器或方法中的异常会被捕获和处理。在全局范围应用过滤器时,整个应用程序中的所有异常都会被捕获和处理。
示例代码
以下是一个完整的示例代码,展示了如何创建和使用一个 HTTP 异常过滤器:
-- -------------------- ---- ------- ------ - ---------------- ------ -------------- -------------- ----------- ----------- ---- ---------- - ---- ----------------- ------ - -------- -------- - ---- ---------- --------------------- ------ ----- ------------------- ---------- --------------- - ---------------- -------------- ----- -------------- - ----- --- - -------------------- ----- -------- - ---------------------------- ----- ------- - -------------------------- ----- ------ - ---------------------- -------- --------------- ------- ----------- ------- ---------- --- --------------------- ----- ------------ --- - - ------------------- -------------------------------- ------ ----- -------------- - ------ --------- - ----- --- -------------------------- ---------------------- - -
在这个示例中,HttpExceptionFilter
过滤器捕获了 HttpException
异常,并返回了一个包含状态码、时间戳和请求路径的 JSON 响应。