如何为微服务创建NestJS全局异常过滤器?

Rin*_*ieR 5 node.js typescript nestjs

我刚刚制作了一个全局异常过滤器,看起来与 Nest 文档上的完全一样: https: //docs.nestjs.com/exception-filters

它捕获了除了 Nest 生命周期之外的所有内容,所以我想知道,如何为该过滤器未捕获的异常创建一个全局过滤器,例如 Nest 的微服务(kafka 传输)事件?

小智 1

如果您使用混合应用程序,这意味着带有 rpc 微服务的 http,则全局过滤器仅用于 http。要共享全局配置,您必须设置inheritAppConfig: true

rpc-异常.filter.ts

import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
import { KafkaContext, RpcException } from '@nestjs/microservices';
import { throwError } from 'rxjs';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  async catch(exception: HttpException, host: ArgumentsHost) {
    const hostType = host.getType(); // 'rpc'
    const context = host.switchToRpc().getContext<KafkaContext>();
    return throwError(() => new RpcException(exception));
  }
}
Run Code Online (Sandbox Code Playgroud)

主要.ts

app.connectMicroservice(
{
  transport: Transport.KAFKA,
  options: {
    client: config.KAFKA_CLIENT_CONFIG,
    consumer: {
      groupId: config.MODULE_ALIAS,
    },
  },
} as KafkaOptions,
{ inheritAppConfig: true });
Run Code Online (Sandbox Code Playgroud)