异常过滤器

异常过滤器

HTTP异常过滤器层和相应的Web套接字层之间的唯一区别是HttpException,您应该使用而不是抛出WsException

throw new WsException('Invalid credentials.'

提示WsException类是从进口@nestjs/websockets包。

Nest将处理抛出的异常,因此,exception使用以下结构发出消息:

{ status: 'error', message: 'Invalid credentials.' }

过滤器

自定义过滤器功能,以及支持和等效工作。下面是一个使用手动实例化的方法范围过滤器(类范围的工作)的示例:

@UseFilters(new WsExceptionFilter()) @SubscribeMessage('events') onEvent(client, data: any): WsResponse<any> { const event = 'events'; return { event, data }; }

遗产

通常,您将创建完全自定义的异常过滤器,以满足您的应用程序要求。虽然您希望重用已经实现的核心异常过滤器并根据某些因素覆盖行为,但可能存在用例。

为了将异常处理委托给基本过滤器,您需要扩展BaseWsExceptionFilter并调用继承的catch()方法。此外,HttpServer必须注入引用并传递给super()调用。

JS

import { Catch, ArgumentsHost } from '@nestjs/common'; import { BaseWsExceptionFilter } from '@nestjs/websockets'; @Catch() export class AllExceptionsFilter extends BaseWsExceptionFilter { catch(exception: any, host: ArgumentsHost) { super.catch(exception, host } }

显然,您应该使用您量身定制的业务逻辑(例如添加各种条件)来增强上述实现。