Как получить метаданные из метода службы gRP C в Node - PullRequest
0 голосов
/ 04 марта 2020

У меня есть служба gRP C, которая работает следующим образом:

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('bob@loblaw.com');
  response.setConsoleUser(user);
  callback(null, response);
},

Я попытался изменить эту подпись на эту:

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

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

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

1 Ответ

1 голос
/ 04 марта 2020

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

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

...