Как получить пользовательскую ошибку в веб-приложении?
У меня есть следующее простое определение сервиса:
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.
0 ответов
Вот пример того, как потреблять 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)
}