如何在 gRPC nodejs 客户端中解压 google.protobuf.Any 类型?

Z f*_* fp 9 protocol-buffers node.js grpc

我的protobuf文件是这样的:

syntax = "proto3"; import "google/protobuf/any.proto";

service RoomService {
    getTestAny (Hotelid) returns (google.protobuf.Any); }

message Hotelid {
    string hotelid = 1; 
} 

message HtlInDate {
    Hotelid hotelid = 1;
    string date = 2; 
}
Run Code Online (Sandbox Code Playgroud)

我的 java-gRPC-server 代码是这样的:

@Override
public void getTestAny(Roomservice.Hotelid request, StreamObserver<Any> responseObserver) {

    Roomservice.Hotelid hotelid = Roomservice.Hotelid.newBuilder()
                                             .setHotelid("This is Hotelid")
                                             .build();

    Roomservice.HtlInDate htlDate = Roomservice.HtlInDate.newBuilder()
                                               .setHotelid(hotelid)
                                               .setDate("This is Data")
                                               .build();

    responseObserver.onNext(Any.pack(htlDate));
    responseObserver.onCompleted();
}
Run Code Online (Sandbox Code Playgroud)

我从 nodejs-gRPC-client 发出请求,代码是这样的:

function () {
    var client = new services.RoomServiceClient('localhost:6565',
        grpc.credentials.createInsecure());

    var request = new messages.Hotelid();
    var hotelid = "ignore";

    request.setHotelid(hotelid);

    var call = client.getTestAny(request, function (err, response) {

        var obj = response.toObject();

        console.log(obj);
    });
}
Run Code Online (Sandbox Code Playgroud)

nodejs-gRPC-client 中的响应是 Any 类型。它包含一个数据数组:

array:["type.googleapis.com/HtlInDate", Uint8Array[10,17,10...]]
Run Code Online (Sandbox Code Playgroud)

我尝试使用response.toObject()来获取 HtlInDate 实例,但我只是这样:

obj:{
   typeUrl:"type.googleapis.com/HtlInDate",
   value:"ChEKD1RoaXMgaXMgSG90ZWxpZBIMVGhpcyBpcyBEYXRh"
}
Run Code Online (Sandbox Code Playgroud)

那么如何解压 Any 类型的响应并准确获取 HtlInDate 实例呢?如果您对此有任何想法,非常感谢!

mur*_*d99 2

目前,google.protobuf.AnyNode.js 不支持该类型,无论是 gRPC 默认使用的 Protobuf.js,还是官方第一方 protobuf 实现的 google-protobuf。