如何将元数据添加到nodejs grpc调用
Posted
技术标签:
【中文标题】如何将元数据添加到nodejs grpc调用【英文标题】:How to add metadata to nodejs grpc call 【发布时间】:2016-09-28 07:23:21 【问题描述】:我想知道如何将元数据添加到 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类型来实现我正在寻找的东西,并且文档有点稀疏关于如何实现这一目标。
【问题讨论】:
doc
指的是什么?
【参考方案1】:
我最终通过自省 grpc 凭据代码并修改实现以公开内部函数来解决这个问题。在node_modules
中的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,
)
【讨论】:
没必要。CallCredentials.createFromPlugin
已经暴露为更惯用的 grpc.credentials.createFromMetadataGenerator
。此外,您可以直接将元数据传递给调用,而无需使用凭据接口。【参考方案2】:
您可以将元数据作为可选参数直接传递给方法调用。因此,例如,您可以这样做:
var meta = new grpc.Metadata();
meta.add('key', 'value');
client.send(doc, meta, callback);
【讨论】:
【参考方案3】:为了完整起见,我将扩展 @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];
【讨论】:
以上是关于如何将元数据添加到nodejs grpc调用的主要内容,如果未能解决你的问题,请参考以下文章
将元数据添加到 CSV 文件中以指示 Excel 应如何打开
如何将元数据谷歌语音传递给文本 api - swift ios
使用 Laravel 5.0 存储门面将元数据、标头(Expires、CacheControl)添加到上传到 Amazon S3 的文件中