如何从 Node 中的 gRPC 服务方法获取元数据
How to get metadata from a gRPC service method in 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
,只是 returns 一些假数据:
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) => {
但是如果我这样做,第二个参数实际上是回调函数,而第三个参数是未定义的。
有没有办法从我的服务实现中读取元数据?或者是否有其他一些 class 我必须附加我的服务以便我可以侦听传入的元数据?
传递给服务器方法的第一个参数不是消息对象。它是一个 "call" 对象,具有多个不同的属性,包括 call.metadata
获取元数据,对于一元和服务器流方法,call.request
具有实际的请求消息。对于流式请求,调用对象也是一个 Node.js 流对象,您可以写入 and/or 从中读取,以相关者为准。
有关详细信息,请查看 API reference documentation 中的 ServerUnaryCall
和 Server(Readable|Writable|Duplex)Stream
类。
我有这样的 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
,只是 returns 一些假数据:
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) => {
但是如果我这样做,第二个参数实际上是回调函数,而第三个参数是未定义的。
有没有办法从我的服务实现中读取元数据?或者是否有其他一些 class 我必须附加我的服务以便我可以侦听传入的元数据?
传递给服务器方法的第一个参数不是消息对象。它是一个 "call" 对象,具有多个不同的属性,包括 call.metadata
获取元数据,对于一元和服务器流方法,call.request
具有实际的请求消息。对于流式请求,调用对象也是一个 Node.js 流对象,您可以写入 and/or 从中读取,以相关者为准。
有关详细信息,请查看 API reference documentation 中的 ServerUnaryCall
和 Server(Readable|Writable|Duplex)Stream
类。