首页 > 解决方案 > 节点 gRPC:将元数据从服务器发送到客户端而不会出错

问题描述

从客户端,很容易为服务器添加元数据:

const meta = new grpc.Metadata();
meta.add('xyz', 'okay');

stub.service.Rpc(request, meta, (err, response) => {
});

上面可以在服务器上访问,如下所示:

call.metadata.get('xyz');

现在,如果我们需要将元数据从服务器发送到客户端,我们这样做:

const err = { code, details };
const meta = new grpc.Metadata();
meta.add('...', '...');

callback(err, null, meta);

请注意,我们正在传递错误,实际响应是null.

如何传递null错误和非空响应以及元数据?

如果我执行以下操作,它似乎不起作用,因为无法访问客户端上的元数据而不会出现错误。

callback(null, r, meta);
// `r` is some response message

当没有错误时,gRPC 规范是否明确禁止将元数据从服务器发送到客户端?

另外,在我们讨论的时候,我想有人解释一下我们如何在 Node.js 中从服务器向客户端发送尾随元数据和初始元数据。

相关链接:

标签: javascriptnode.jsgrpcgrpc-node

解决方案


ServerUnaryCall.sendMetadata(responseMetadata)

服务器:

const method = (call, cb) => {
  // code
  call.sendMetadata(metadata)
  // code
}

客户:

const call = client.method(params, cb)
call.on('metadata', (metadata) => {
  // code
})

推荐阅读