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

时间:2019-06-04 13:20:52

标签: node.js protocol-buffers grpc

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

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

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

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

{
status: 200,
message: "Success!"

}

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

如果您不喜欢此方法,则始终可以尝试使用动态代码生成方法,该方法使用protobufjs,并允许您使用普通对象作为可以传递的对象。两种方法之间都有优缺点,但是如果您想要摆脱二传手,那将是一条路。

答案 1 :(得分:-1)

您可能会在error handling best practices上找到此指南有用。

通常,错误是通过引发异常来创建的。该异常包含状态代码和一条消息,与您的XdebugDriver.onBreak must not be null java.lang.IllegalArgumentException: Argument for @NotNull parameter 'remoteFileUrl' of com/jetbrains/php/debug/xdebug/debugger/XdebugDriver.onBreak must not be null 响应相匹配。