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タイプを与えなければならないかわかりません、そしてドキュメントは少しまばらですこれを達成する方法について。
メタデータをオプションの引数としてメソッド呼び出しに直接渡すことができます。したがって、たとえば、次のようにすることができます。
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);
サーバー上 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資格情報コードを内省し、内部関数を公開するように実装を変更することでそれを解決しました。 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,
)