gRPC 节点:如何设置另一个消息类型的字段(本身具有多种类型)

Alb*_*ses 2 protocol-buffers node.js grpc

我想要实现的是我有一个.proto文件:

message Request {
    Error error = 1;
    bool success = 2;
}

message Error  {
   int32 status = 1;
   string message = 2;
}
Run Code Online (Sandbox Code Playgroud)

我对其进行编译,以便为客户端和服务生成文件。然后,当我想设置grpc生成的内容时setError(),我必须传递给函数什么?(匹配错误消息)。一个对象,例如:

{
status: 200,
message: "Success!"

}
Run Code Online (Sandbox Code Playgroud)

不起作用...有效的是:

const error = new Client.Error();
error.setMessage('Something');
error.setStatus(400);
Run Code Online (Sandbox Code Playgroud)

然后,如果我有一条请求消息:

const request =  new Client.Request()
request.setError(error)
Run Code Online (Sandbox Code Playgroud)

这可行,但我想知道是否可以直接将对象传递给 setError,而不必单独设置每个字段......

Nic*_*ble 5

不幸的是,protobuf 的 javascript 编译器生成的代码强制您使用 setter 和 getter,因此您必须一一设置每个字段。

如果您不喜欢这种方法,您可以随时尝试使用动态 codegen 方法,该方法使用 protobufjs,并允许您使用普通对象作为可以传递的内容。这两种方法各有优缺点,但如果您想摆脱设置器,那就是正确的方法。