请参阅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;
}
如果您使用默认选项加载包,则客户端无法删除 a 的项目
client.CRUD.updateTable({a: []})
因为参数到达服务器端时就{a: []}
变成了。{}
如果您使用选项 {arrays: true} 加载包,则该字段a
将被无意中清除,而客户端仅尝试更新其他字段:
client.CRUD.updateTable({b: 'updated value'})
因为参数到达服务器端时就{b: 'updated value'}
变成了。{a: [], b: 'updated value'}
任何人都可以分享一些关于如何使用grpc-node
和 处理这两种情况的更好的想法proto3
吗?