2017-03-13 10 views
0

나는 MongoDB에서 객체를 반환하는 RPC 함수를 작성하고있다. 여기서 사용자는 호출에서 반환 된 매개 변수를 정의 할 수있다. 문제는 proto에서 '동적 인'객체를 정의하는 방법을 찾지 못하는 것입니다. 내가 찾은 모든 예제는 정적 인 객체를 기반으로하며 모든 매개 변수는 .proto 파일에 설정됩니다. 는 RPC 기능은 다음과 같습니다 :(g) rpc는 동적 객체를 매개 변수로 지원합니까?

package object; 

service Object{ 
    rpc fetch (queryReq) returns (objectRes) {} 
} 

message queryReq { 
    string id = 1; 

    string parameters = 2; 
} 

message objectRes { 
    // what should I write here? 
} 
내가 문자열로 결과를 설정할 수 있습니다 알고

, 그냥 캐릭터 라인 화 전체 개체 만이 :

function fetch(call, callback) { 
    ObjectSvc.getById(call.request.id, call.request.parameter, (err, object) => { 
    if (err) { 
     log.error(err); 
     callback(err); 
    } else { 
     callback(null, object); 
    } 
    }); 
}; 

내 .proto 정의는 다음과 같습니다 그것은 의도 된 방식입니까? 이것을하기위한 더 나은 (그리고 더 정확한 ') 방법이 없습니까? 아니면 매번 (아마도) 큰 엉덩이 문자열을 반환해야합니까? 그것은 약간 차선책으로 보입니다.

답변

1

가장 간단한 옵션은 실제로 서버에서 개체의 문자열을 지정하고 클라이언트에서 프로세스를 역으로 수행하는 것입니다.

메시지 유형을 google.protobuf.Struct (임의의 JSON과 동등한 객체를 나타낼 수 있음)으로 사용할 수 있습니다. 불행히도, 그 타입은 자동으로 정규 자바 스크립트 객체로 변환되지 않기 때문에 실제 값 객체로 작업해야합니다. 또한 메시지의 전체 구조는 Struct 유형을 사용할 때 저장해야하므로 JSON 표현보다 훨씬 작을 것으로 예상 할 수는 없습니다.

+0

감사합니다. 이 답변은 나의 초기 해결책을 반영하고, 대체 솔루션을 제시하며 그 단점을 설명합니다. 큰. –