企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 异常过滤器 `websockets` 的**异常过滤器**工作原理与[HTTP异常过滤器](https://docs.nestjs.com/exception-filters)完全相同。唯一的区别是不要抛出`HttpException`,你应该抛出`WsException`。 ```typescript throw new WsException('Invalid credentials.'); ``` > 注意 `WsException` 类是从`@nestjs/websockets`包中导入的。 在上述示例中,`Nest` 会处理这个抛出的异常并使用下列结构发出`exception`消息: ```json { status: 'error', message: 'Invalid credentials.' } ``` ### 过滤器 **Web sockets**异常过滤器行为和HTTP异常处理器也是非常类似的。下面是一个使用手动实例化的方法范围过滤器的示例。和基于HTTP应用一样,你也可以使用一个网关范围的过滤器(例如,使用`@UseFilters()`装饰器作为网关类的前缀)。 ```typescript @UseFilters(new WsExceptionFilter()) @SubscribeMessage('events') onEvent(client, data: any): WsResponse<any> { const event = 'events'; return { event, data }; } ``` ### 继承 通常,您将创建完全自定义的异常过滤器,以满足您的应用程序要求。但仍然存在一些情况,你可能需要通过简单的扩展`核心异常过滤器`并基于一些特定要素覆盖其行为。 为了将异常处理委托给基本过滤器,您需要扩展 `BaseWsExceptionFilter` 并调用继承的 `catch()` 方法。 ```typescript import { Catch, ArgumentsHost } from '@nestjs/common'; import { BaseWsExceptionFilter } from '@nestjs/websockets'; @Catch() export class AllExceptionsFilter extends BaseWsExceptionFilter { catch(exception: unknown, host: ArgumentsHost) { super.catch(exception, host); } } ``` 上述应用只是用于概括性说明该方法如何使用。在您的应用中扩展的异常过滤器应该包含您的业务逻辑(例如,添加各种条件)。