Apollo Server:如何根据子节点选择性返回数组成员
Apollo Server 4.3.0 过滤无children的ParentEdge 解决方案探讨
我正在用Node.js Apollo Server(4.3.0)构建复杂GraphQL服务,简化后的Schema如下:
type Query { parentQuery(first: Int, after: String): ParentConnection childQuery(first: Int, after: String): ChildConnection } type ParentConnection { edges: [ParentEdge!] pageInfo: PageInfo } type ParentEdge { node: Parent cursor: String } type Parent { children(first: Int, after: String): ChildConnection } type ChildConnection { edges: [ChildEdge!] pageInfo: PageInfo } type ChildEdge { node: Child cursor: String } type Child { id: ID! }
调用parentQuery查询完整树结构时,部分Parent的children字段没有edges,这类ParentEdge不需要返回给客户端,我希望在服务端直接移除,避免客户端处理——既浪费资源又容易出错。
在Apollo Server中,常规做法是在解析器树处理后返回null或不添加到Connection,但这里ChildConnection带有标准Connection参数,父解析器无法访问子字段的参数:
- 从
ParentConnection层级处理会忽略ChildConnection的参数; - 从
Parent层级处理最多修改ParentEdge解析器,还是会在ParentConnection.edges中留下空条目; - 把
Parent的children字段参数提升到parentQuery虽然能解决问题,但违背了Connection最佳实践。
我认为有两个优雅的可行方案:
- 让父解析器能够访问子字段的参数;
- 允许在解析器整棵树完成解析后(甚至整个查询完成后)进行统一处理。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

