如何向nodejs grpc调用添加元数据

时间:2016-05-30 12:47:37

标签: node.js metadata protocol-buffers grpc

我想知道如何向nodejs grpc函数调用添加元数据。在使用

创建客户端时,我可以使用通道凭据
var client = new proto.Document('some.address:8000',
    grpc.credentials.createInsecure()
)

使用client.Send(doc, callback)时会发送哪些内容,但go grpc服务器在调用元数据中查找我必须设置的标识信息。我尝试使用grpc.credentials.combineChannelCredentials与不安全的连接和grpc.Metadata实例,但我找不到正确的方法。

我遇到的错误是TypeError: compose's first argument must be a CallCredentials object。我试图跟进它,但它进入c代码失去了我,我无法看到我必须提供给comebineChannelCredentials的javascript类型来实现我正在寻找的东西,而且文档有点稀疏如何实现这一点。

3 个答案:

答案 0 :(得分:18)

您可以将元数据作为可选参数直接传递给方法调用。所以,例如,你可以这样做:

var meta = new grpc.Metadata();
meta.add('key', 'value');
client.send(doc, meta, callback);

答案 1 :(得分:8)

为了完整起见,我将延伸@ murgatroid99的答案。

要将元数据附加到客户上的消息,您可以使用:

var meta = new grpc.Metadata();
meta.add('key', 'value');
client.send(doc, meta, callback);

在调用RPC方法的服务器端,当您想要获取数据时,可以使用:

function(call, callback){ 
   var myVals = call.metadata.get("key"); 
   //My vals will be an array, so if you want to grab a single value:
   var myVal = myVals[0]; 
}

答案 2 :(得分:1)

我最终通过内省grpc凭证代码并修改实现来公开内部函数来解决这个问题。在grpc的{​​{1}}模块中,文件node_modules添加行

grpc/src/node/src/credentials.js
导入exports.CallCredentials = CallCredentials;

然后,在您的代码中,您可以编写类似

的内容
CallCredentials

然后在客户端构建器

中使用var meta = grpc.Metadata(); meta.add('key', 'value'); var extra_creds = grpc.credentials.CallCredentials.createFromPlugin( function (url, callback) { callback(null, meta); } )
extra_creds

现在你可以建立你的客户

var creds = grpc.credentials.combineChannelCredentials(
  grpc.credentials.createSsl(),
  extra_creds,
)