2017-02-10 16 views
1

Мой файл Protobuf как это:Как распаковать google.protobuf.Any тип в клиенте gRPC nodejs?

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; 
} 

Мой код Java-КПГР-сервер так:

@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(); 
} 

И я делаю запрос от nodejs-КПГР-клиент, какой код например:

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); 
    }); 
} 

Ответ в nodejs-gRPC-client - это тип Any. И он содержит массив данных:

array:["type.googleapis.com/HtlInDate", Uint8Array[10,17,10...]] 

Я пытаюсь использовать response.toObject(), чтобы получить HtlInDate экземпляр, но я просто получить так:

obj:{ 
    typeUrl:"type.googleapis.com/HtlInDate", 
    value:"ChEKD1RoaXMgaXMgSG90ZWxpZBIMVGhpcyBpcyBEYXRh" 
}

Так как я могу распаковать ответ любого типа и получить экземпляр HtlInDate точно? Большое спасибо, если у вас есть представление об этом!

ответ

0

В настоящее время google.protobuf.Any типа не поддерживается в Node.js, либо в Protobuf.js, который КПГРЫ используют по умолчанию, или с помощью Google-Protobuf, который является официальной реализацией Protobuf первой партии.