graphql - 如何防止基于选择集运行解析器?

标签 graphql apollo-server

例子:

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/

相关文章:

javascript - 如何在 NestJs 中捕获 Typeorm 事务错误

apollo-server - 如何在 Apollo GraphQL Server 上同步使用 Knexjs

node.js - Apollo 服务器 Playground 无法在 heroku 上运行(本地工作)

graphql - 在 Svelte 中获取 "TypeError ctx[0].data is undefined"

aws-lambda - 在 AWS lambda Web 控制台上测试 Apollo graphql 查询

javascript - 如何从 Node js 查询 GraphQl 端点而不需要笨重的字符串操作?

javascript - 使用 graphql-sequelize 解析器限制递归 GraphQL 架构查询的深度(Node.js、express-graphql)

返回错误的可空对象的 GraphQL 不是空字段

node.js - Postgres 尝试返回我的模型中不存在的列

graphql - Cypress 没有看到 graphql 请求