Узел gRPC: Как установить поле другого типа сообщения (с несколькими типами) - PullRequest
0 голосов
/ 04 июня 2019

Я хочу добиться того, чтобы у меня был файл .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 ]

1 голос
/ 05 июня 2019

К сожалению, сгенерированный код из javascript-компилятора protobuf заставляет вас использовать сеттеры и геттеры, поэтому вам придется устанавливать каждое поле по одному.

Если вам не нравится этот метод, вы всегда можете попробовать использовать метод динамического кодгена, который использует protobufjs и позволяет вам использовать простые объекты в качестве того, что вы можете передать. Есть плюсы и минусы между этими двумя методами, но если вы хотите избавиться от сеттеров, это будет путь.

0 голосов
/ 04 июня 2019

Вы можете найти это руководство по рекомендациям по обработке ошибок полезным.

Как правило, ошибки создаются путем выдачи исключений. Исключение содержит код состояния и сообщение, которое соответствует вашему ответу Error.

...