【问题标题】:gRPC Node: How to set a field that is of another Message type (with multiple types itself)gRPC 节点:如何设置另一个消息类型的字段(本身具有多种类型)
【发布时间】:2019-06-04 13:20:52
【问题描述】:

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

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

message Error  {
   int32 status = 1;
   string message = 2;
}

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

{
status: 200,
message: "Success!"

}

不起作用...起​​作用的是:

const error = new Client.Error();
error.setMessage('Something');
error.setStatus(400);

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

const request =  new Client.Request()
request.setError(error)

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

【问题讨论】:

  • 您是否尝试创建与Error 消息类型或Request 消息类型匹配的对象?另外,您说您已经尝试过的“不起作用”。出了什么问题?有错误信息吗?
  • 为清晰起见编辑:D

标签: node.js protocol-buffers grpc


【解决方案1】:

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

如果您不喜欢这种方法,您可以随时尝试使用动态 codegen 方法,该方法使用 protobufjs,并允许您使用普通对象作为可以传递的对象。这两种方法各有利弊,但如果您想摆脱 setter,那将是正确的选择。

【讨论】:

    【解决方案2】:

    您可能会在error handling best practices 上发现此指南很有用。

    一般来说,错误是由抛出异常造成的。异常有一个状态码和一条消息,与您的 Error 响应相匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多