【问题标题】:How to get metadata from a gRPC service method in Node如何从 Node 中的 gRPC 服务方法获取元数据
【发布时间】:2020-03-03 21:39:36
【问题描述】:

我有一个像这样运行的 gRPC 服务:

server.addService(PassportService, implementation);
server.bind(mfeConfig().grpc.passport, grpc.ServerCredentials.createInsecure());
server.start();

我可以像这样从客户端调用我的服务:

const request = new GetConsoleUserRequest();
const meta = new grpc.Metadata();
meta.add('__.grpc.exchanged-token', token);
this.client.getConsoleUser(
  request,
  meta,
  (err: grpc.ServiceError, val: GetConsoleUserResponse) => {

但我不知道如何在我的服务实现中读取元数据。现在不管我为getConsoleUser 定义了哪些重载,元数据都不是参数之一。这是getConsoleUser,它只是返回了一些假数据:

getConsoleUser: (_req: GetConsoleUserRequest, callback: Function) => {
  const response = new GetConsoleUserResponse();
  const user = new ConsoleUser();
  user.setName('Bob Loblaw');
  // Change me to userStatus.GUEST to simulate anonymous user access
  user.setState(userStatus.REGISTERED);
  user.setEmail('bob@loblaw.com');
  response.setConsoleUser(user);
  callback(null, response);
},

我已尝试将签名更改为:

getConsoleUser: (_req: GetConsoleUserRequest, meta: grpc.Metadata, callback: Function) => {

但如果我这样做,第二个参数实际上是回调函数,第三个参数是未定义的。

有没有办法从我的服务实现中读取元数据?还是我必须将我的服务附加到其他一些类,以便我可以监听传入的元数据?

【问题讨论】:

    标签: node.js typescript grpc grpc-node


    【解决方案1】:

    传递给服务器方法的第一个参数不是消息对象。它是一个“调用”对象,具有多个不同的属性,包括用于获取元数据的call.metadata,对于一元和服务器流方法,call.request 具有实际的请求消息。对于流式请求,调用对象也是一个 Node.js Stream 对象,您可以写入和/或读取,无论哪个相关。

    有关更多详细信息,请查看API reference documentation 中的ServerUnaryCallServer(Readable|Writable|Duplex)Stream 类。

    【讨论】:

    • 就是票!谢谢!!
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多