У меня есть служба 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) => {
Но если я это сделаю, второй аргумент на самом деле это функция обратного вызова, а третий аргумент не определен.
Есть ли способ прочитать метаданные из моей реализации сервиса? Или есть какой-то другой класс, к которому я должен присоединить свой сервис, чтобы я мог прослушивать входящие метаданные?