目录
异常过滤器
HTTP异常过滤器层与相应的WebSockets层之间唯一的区别是,
您应该使用WsException
而不是HttpException
来抛出异常。
throw new WsException('Invalid credentials.');
tip
WsException
类是从@nestjs/websockets
软件包导入的。
使用上述示例,Nest将处理抛出的异常并使用以下结构发出exception
消息:
{
"status": "error",
"message": "Invalid credentials."
}
过滤器
WebSockets异常过滤器的行为等效于HTTP异常过滤器。
以下示例使用手动实例化的方法范围过滤器。
与基于HTTP的应用程序一样,
您还可以使用网关范围的过滤器(即,在网关类前加上@UseFilters()
装饰器)。
@UseFilters(new WsExceptionFilter())
@SubscribeMessage('events')
onEvent(client, data: any): WsResponse<any> {
const event = 'events';
return { event, data };
}
继承
通常,您将创建完全定制的异常过滤器,以满足应用程序的要求。 但是,在某些情况下,您可能希望简单地扩展核心异常过滤器,并根据某些因素覆盖行为。
为了将异常处理委托给基本过滤器,您需要扩展BaseWsExceptionFilter
并调用继承的catch()
方法。
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);
}
}
上述实现只是演示了这种方法。您扩展的异常过滤器的实现将包含您的定制业务逻辑(例如,处理各种条件)。