Как получить пользовательскую ошибку в веб-приложении? - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть следующее простое определение сервиса:

service Echo {
    rpc echo (In) returns (Out) {}
}

message In {
    string text = 1;
}

message Out {
    string text = 1;
}

message Error {
    int32 status = 1;
}

Как видите, у меня есть пользовательское определение Error.Он содержит код состояния конкретной службы.Служба оценивает данный текст и возвращает ошибку, если текст не подходит.В моем Java-приложении я делаю следующее, чтобы вернуть объект Error:

import com.google.protobuf.Any;
import com.google.rpc.Code;
import com.google.rpc.Status;

...

final StreamObserver<Out> response = ...; // as given by the library
final Error error = Error.newBuilder().setStatus(55).build(); // this creates a custom Error object, see .proto

response.onError(StatusProto.toStatusRuntimeException(Status.newBuilder()
        .setCode(Code.INVALID_ARGUMENT.getNumber())
        .setMessage("This argument is invalid.")
        .addDetails(Any.pack(error))
        .build()));

Теперь у меня вопрос: как я могу получить пользовательскую полезную нагрузку Error в моем приложении JS?

var request = new In();
request.setText('Some text which will be evaluated at the server.');

client.echo(request, {}, (error, response) => {
   // if (55 = error.details.status) { ... }
});

В настоящее время я работаю с JS-версией grpc-web, хотя в ближайшее время могу перейти на TS.

1 Ответ

0 голосов
/ 26 марта 2019

Вот пример того, как использовать объект error в унарном RPC: https://github.com/grpc/grpc-web/blob/master/net/grpc/gateway/examples/echo/echoapp.js#L71-L74

Короче говоря, вы делаете

if (err) {
  // console.log(err.code)
  // console.log(err.message)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...