[英]How to add metadata to nodejs grpc call
我想知道如何将元数据添加到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
了我,我看comebineChannelCredentials
为实现我想要的功能而必须给comebineChannelCredentials
提供什么javascript类型,并且文档对如何实现这一目标有点稀疏。
您可以将元数据直接作为可选参数传递给方法调用。 因此,例如,您可以这样做:
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
在模块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,
)
现在您可以使您的客户
var client = new proto.Document(
'some.address:8000',
creds,
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.