异常过滤器
异常过滤器
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
}
}
显然,您应该使用您量身定制的业务
逻辑(例如添加各种条件)来增强上述实现。