首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@ GRPC /grpc-js更新后,服务器不再接收NestJS GRPC元数据

@ GRPC /grpc-js更新后,服务器不再接收NestJS GRPC元数据
EN

Stack Overflow用户
提问于 2021-02-08 23:49:53
回答 1查看 256关注 0票数 1

grpc正在折旧,所以我已经按照维护者的建议转移到了@grpc/grpc-js。自从迁移到新的包之后,NestJs不再接收ExecutionContext中的元数据,下面的代码一直工作得很好,直到转换。

服务器使用@grpc/grpc-js的方式如下:

代码语言:javascript
复制
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { Metadata, status } from '@grpc/grpc-js';
import { RpcException } from '@nestjs/microservices';

export interface IUserDecorator {
  clientId: string;
}

export const User = createParamDecorator(
  (data, context: ExecutionContext): IUserDecorator => {
    const metadata = context.switchToRpc().getContext() as Metadata;
    const { clientid } = metadata.getMap();

    if (!clientid) {
      throw new RpcException({
        code: status.UNAUTHENTICATED,
        message: 'clientId is required',
      });
    }

    return {
      clientId: clientid.toString(),
    };
  },
);

客户端构建元数据的方式如下:

代码语言:javascript
复制
import * as GRPC from '@grpc/grpc-js';

const meta = new GRPC.Metadata();
meta.add("clientId", "dasd");

以这种方式构建元数据会产生以下对象

代码语言:javascript
复制
Metadata { internalRepr: Map { 'clientid' => [Array] }, options: {} }

服务器未收到设置的meta

代码语言:javascript
复制
   // console.log context.switchToRpc().getContext()

   {
        "_internal_repr": {
            "user-agent": [
                "grpc-node/1.24.4 grpc-c/8.0.0 (osx; chttp2; ganges)"
            ]
        },
        "flags": 0
    },

但是,当我使用旧的grpc包构造元数据时,服务器会正确地接收元数据。

代码语言:javascript
复制
import { Metadata } from 'grpc'
const goodMets = new Metadata();
goodMets.add('clientId', 'dasd');

产生

代码语言:javascript
复制
Metadata { _internal_repr: { clientid: [Array] }, flags: 0 }

服务器接收

代码语言:javascript
复制
    {
        "_internal_repr": {
            "clientid": [
                "dasd"
            ],
            "user-agent": [
                "grpc-node/1.24.4 grpc-c/8.0.0 (osx; chttp2; ganges)"
            ]
        },
        "flags": 0
    },

我天真地试图添加元作为蛇的情况(几乎可以肯定它不会工作,但你知道…试一试)

EN

回答 1

Stack Overflow用户

发布于 2021-02-10 03:30:02

您在此处所做的更改实际上不会切换到新的grpc-js包。它只是尝试将grpc-js中的Metadata类与NestJS内部使用的grpc包一起使用。NestJS需要将其对grpc的依赖更改为@grpc/grpc-js,才能真正进行切换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66104867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档