如何从拦截器设置 Nestjs Grpc 响应的元数据

问题描述 投票:0回答:1

我正在尝试设置元数据以响应来自 Nestjs 拦截器的 Grpc 请求。 但我找不到在哪里设置它。有谁知道这是如何工作的?这是我到目前为止尝试过的。

Injectable()
export class SomeInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    const ctx = context.switchToRpc();
    console.log(ctx.getContext());

    // ctx.getResponse().Metadata.set(key,value)
    return next.handle().pipe(tap((t) => console.log(t)));
  }
}
nestjs
1个回答
0
投票

这是我在 NATS 上下文中的实现。它应该是可转让的,因为它们都是

RPCs

 export class MetadataInterceptor implements NestInterceptor {
  intercept(
    context: ExecutionContext,
    next: CallHandler<any>,
  ): Observable<any> | Promise<Observable<any>> {
    if (context.getType() === 'rpc') {
      const message = context.getArgByIndex(0);

      const natsContext = context.switchToRpc().getContext<NatsContext>();

      message.metadata.info = natsContext.getArgs();
    }

    return next.handle();
  }
}

记下

if(context.getType() === 'rpc')
检查以确保它是 rpc 操作。您可以通过装饰控制器来注入拦截器,如下所示:
@UseInterceptors(MetadataInterceptor)
。或者,作为 main.ts 中的全局拦截器:
app.useGlobalInterceptors(new MetadataInterceptor());

© www.soinside.com 2019 - 2024. All rights reserved.