Как добавить метаданные в вызов NodeJS grpc
Я хотел бы знать, как добавить метаданные в вызов функции 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, который теряет меня, я не вижу, какой тип javascript я должен дать comebineChannelCredentials
для достижения того, что я ищу, и документы немного разрежены о том, как этого достичь.
3 ответов
метаданные можно передавать непосредственно в качестве необязательного аргумента вызову метода. Так, например, вы можете сделать следующее:
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);
на сервере side 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,
)