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

我想知道如何添加元数据到nodejs grpc函数调用。 使用客户端时,我可以使用通道凭证

var client = new proto.Document('some.address:8000', grpc.credentials.createInsecure() ) 

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

我碰到的错误是TypeError: compose's first argument must be a CallCredentials object 。 我试图遵循它,但它进入C代码,这使我失去了,我不能看到什么JavaScripttypes我必须给comebineChannelCredentials实现我所期待的和文档是如何实现这一点稀疏。

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

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

为了完整起见,我将扩展@ murgatroid99答案。

为了将元数据附加到客户端上的消息您可以使用:

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

在服务器端int调用你的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]; } 

我最终通过反思grpc证书代码和修改实现来展示一个内部函数。 在grpc模块中,文件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, ) 

现在你可以让你的客户

 var client = new proto.Document( 'some.address:8000', creds, )