【问题标题】:Graphql: How can get field arguments of a type in resolver?Graphql:如何在解析器中获取类型的字段参数?
【发布时间】:2018-06-16 01:24:36
【问题描述】:

我使用graphql-tools 库和makeExecutableSchema 函数通过将架构和解析器传递给它来制作我的架构

这是我的架构:

type Trip {
  code: String!
  driver: User!
  vehicle: Vehicle!
  destination: Location!
  passengers(page: Int, count: Int): [User!]!
}
type Query {
  trip(id: String!): Trip
}

这是我的解析器:

// some imports...
export default {
  Query: {
    async trip(_, { id }, ctx, info) {
      const trip = await Trip.findById(id);
      // const page = ???, count = ???
      // work on fetch data...
      return result;
    },
};

我怎样才能得到pagecount 被定义为passengers 的嵌套参数?

【问题讨论】:

标签: node.js graphql apollo-server


【解决方案1】:

您应该为Trip 类型定义一个解析器,例如:

export default {
  Query: {
    async trip(_, { id }, ctx, info) {
      const trip = await Trip.findById(id);
      // const page = ???, count = ???
      // work on fetch data...
      return result;
    },
  Trip: {
    async passengers(trip, { page, count }, ctx, info) {
      ...
    },
  }
};

在 GraphQL 中,它不是“类型的嵌套字段”的概念,而只是“字段的类型”的组合。 Query 类型的trip 字段具有Trip 类型,因此当您要使用passengers 字段时,应将其视为Trip 类型下的字段,而不是Query 类型。

【讨论】:

  • 感谢您的复制,它很有帮助。您知道访问顶级字段(countpage)的任何方式或工具吗?因为我想通过加入查询来获取所有数据我知道所有数据都显示在info 参数中,但是如何解析它
  • 我认为像 Facebook 的 dataloader 这样的工具是您可以考虑的工具。 Dataloader 可以resolve every individual data request within a batch,并且是一种在顶层生成JOIN 查询的不同方法(这不是一个灵活的解决方案)以有效地加载数据。
猜你喜欢
  • 2018-06-08
  • 2020-10-12
  • 2021-08-22
  • 2021-02-08
  • 2021-08-23
  • 1970-01-01
  • 2020-08-31
  • 2021-05-02
相关资源
最近更新 更多