例子:
query {
me {
starredPosts {
id
}
}
}
服务器怎么会注意到只请求了id,而使用已经获取的
user.starredPosts
(一组 id),而不是调用 Posts.findOne(id)
每个ID?
最佳答案
我们遇到了同样的问题,并且正在将我们在过去一年半内在内部构建的工具开源以解决这些问题:https://github.com/4Catalyzer/graphql-node-resource/pull/1 .
我们使用的解决方案是,对于这样的对象解析器,将它们解析为仅包含 ID 的“ stub ”对象,例如:
const childField = {
type: ChildType,
resolve: obj => ({ id: obj.childId }),
};
然后我们使用
DataLoader
使用我们自己的默认解析器在需要时获取子对象上的附加字段。我们连接到我们的内部 REST API,它支持对这些请求进行批处理,因此需要额外字段的查询得到有效调度和解决。
但是,这确实会在编写自定义解析器时引入潜在的错误,因为不能保证
obj
实际上有相关的领域。我们通过设置静态类型来防止对 obj
的属性进行未经检查的访问来解决这个问题。 .
关于graphql - 如何防止基于选择集运行解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48602257/