簡體   English   中英

如何將元數據添加到Node.js grpc調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM