web-dev-qa-db-ja.com

nodejsgrpc呼び出しにメタデータを追加する方法

Nodejsgrpc関数呼び出しにメタデータを追加する方法を知りたいのですが。クライアントを作成するときにチャネル資格情報を使用できます

_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タイプを与えなければならないかわかりません、そしてドキュメントは少しまばらですこれを達成する方法について。

13
Trent

メタデータをオプションの引数としてメソッド呼び出しに直接渡すことができます。したがって、たとえば、次のようにすることができます。

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

完全を期すために、@ 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]; 
}
9
Victor Axelsson

私は最終的に、grpc資格情報コードを内省し、内部関数を公開するように実装を変更することでそれを解決しました。 node_modulesgrpcモジュールで、ファイル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,
)
1
Trent