我有以下简单的服务定义:
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) { ... }
});
我目前正在使用 grpc-web 的 JS 版本,但我可能很快就会迁移到 TS。