HTTP 异常过滤器 层与相应的 Web 套接字层之间的唯一区别是,您不应抛出 HttpException
,而应使用 WsException
。
ts
throw new WsException('Invalid credentials.')
WsException
类从 @nestjs/websockets
包导入。
对于上述示例,Nest 将处理抛出的异常并发出具有以下结构的 exception
消息:
json
{
"status": "error",
"message": "Invalid credentials."
}
过滤器
Web 套接字异常过滤器的行为与 HTTP 异常过滤器相同。以下示例使用手动实例化的方法范围过滤器。与基于 HTTP 的应用程序一样,您也可以使用网关范围过滤器(即,在网关类前添加 @UseFilters()
装饰器)。
ts
@UseFilters(new WsExceptionFilter())
@SubscribeMessage('events')
onEvent(client, data: any): WsResponse<any> {
const event = 'events';
return { event, data };
}
继承
通常,您将创建完全自定义的异常过滤器,以满足您的应用程序要求。但是,在某些情况下,您可能只想扩展核心异常过滤器,并根据某些因素覆盖行为。
为了将异常处理委托给基本过滤器,您需要扩展BaseWsExceptionFilter
并调用继承的catch()
方法。
ts
TS
ts
import { ArgumentsHost, Catch } from '@nestjs/common'
import { BaseWsExceptionFilter } from '@nestjs/websockets'
@Catch()
export class AllExceptionsFilter extends BaseWsExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
super.catch(exception, host)
}
}
上述实现只是演示该方法的一个外壳。您对扩展异常过滤器的实现将包括您定制的业务逻辑(例如,处理各种条件)。