Как получить метаданные из метода службы gRPC в Node

У меня есть служба gRPC, которая работает так:

server.addService(PassportService, implementation);
server.bind(mfeConfig().grpc.passport, grpc.ServerCredentials.createInsecure());
server.start();

Я могу позвонить в свою службу от клиента вот так:

const request = new GetConsoleUserRequest();
const meta = new grpc.Metadata();
meta.add('__.grpc.exchanged-token', token);
this.client.getConsoleUser(
  request,
  meta,
  (err: grpc.ServiceError, val: GetConsoleUserResponse) => {

Но я не могу понять, как читать метаданные в моей реализации службы. Теперь независимо от того, какие перегрузки я определяю для getConsoleUser, метаданные никогда не являются одним из аргументов. Вот getConsoleUser, который просто возвращает фальшивые данные:

getConsoleUser: (_req: GetConsoleUserRequest, callback: Function) => {
  const response = new GetConsoleUserResponse();
  const user = new ConsoleUser();
  user.setName('Bob Loblaw');
  // Change me to userStatus.GUEST to simulate anonymous user access
  user.setState(userStatus.REGISTERED);
  user.setEmail('[email protected]');
  response.setConsoleUser(user);
  callback(null, response);
},

Я пробовал изменить эту подпись на это:

getConsoleUser: (_req: GetConsoleUserRequest, meta: grpc.Metadata, callback: Function) => {

Но если я это сделаю, второй аргумент на самом деле будет функцией обратного вызова, а третий аргумент не определен.

Есть ли способ прочитать метаданные из моей реализации службы? Или есть какой-то другой класс, к которому я должен прикрепить свою службу, чтобы я мог прослушивать входящие метаданные?


person Samo    schedule 03.03.2020    source источник


Ответы (1)


Первый аргумент, переданный в метод сервера, не является объектом сообщения. Это объект «вызова», который имеет несколько различных свойств, включая call.metadata для получения метаданных, а для унарных и серверных потоковых методов call.request имеет фактическое сообщение запроса. Для потоковых запросов объект вызова также является объектом потока Node.js, в который вы можете писать и / или читать, в зависимости от того, что уместно.

Дополнительные сведения см. В классах ServerUnaryCall и Server(Readable|Writable|Duplex)Stream в справочной документации по API .

person murgatroid99    schedule 03.03.2020
comment
Просто билет! Спасибо!! - person Samo; 04.03.2020