如何添加元数据到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, )