Jef*_*ian 7 protocol-buffers grpc-node
请参阅https://github.com/grpc/grpc-node/issues/1202。
通常在CRUD操作中,不提供值意味着不更改该字段,空数组[]意味着清除该字段内的所有项目。
但如果你试图实现CRUD操作并通过grpc将其作为服务提供,那么上述场景就很难实现。
service CRUD {
rpc updateTable(updateRequest) returns updateResponse {}
}
message updateRequest {
repeated string a = 1;
string b = 2;
}
message updateResponse {
boolean success = 1;
}
Run Code Online (Sandbox Code Playgroud)
如果您使用默认选项加载包,则客户端无法删除 by 的项目
client.CRUD.updateTable({a: []})
Run Code Online (Sandbox Code Playgroud)
因为参数到达服务器端时{a: []}就变成了。{}
如果您使用选项 {arrays: true} 加载包,则该字段a将被无意中清除,而客户端仅尝试更新其他字段:
client.CRUD.updateTable({b: 'updated value'})
Run Code Online (Sandbox Code Playgroud)
因为参数到达服务器端时{b: 'updated value'}就变成了。{a: [], b: 'updated value'}
任何人都可以分享一些关于如何使用grpc-node和 处理这两种情况的更好的想法吗proto3?
protobuf 编码不区分这两种情况。由于 protobuf 与语言无关,因此它不理解 Javascript 的“未定义”与“[]”概念上的细微差别。
您需要在原始消息中传递附加信息,以便区分这两种情况。
我强烈建议阅读这里的设计文档:https ://developers.google.com/protocol-buffers