【问题标题】:TypeORM Apollo nested query resolverTypeORM Apollo 嵌套查询解析器
【发布时间】:2019-09-12 03:37:02
【问题描述】:

我有一个架构(定义了适当的数据库表和实体类),例如

type User {
    id: Int!
    phoneNumber: String!
}

type Event {
    id: Int!
    host: User
  }

我正在尝试使用 Apollo 来编写类似

的查询
Query{
  event(id:1){
    host{
      firstName
    }
  }
}

但我不知道如何让 Apollo 库将主机字段中的用户类型解析为存储在事件对象上的 hostId。

我修改了事件以返回 hostId 字段,它工作得很好,但 Graphql 不会将 id 解析为适当的用户类型。我错过了什么?

编辑:缺少解析器代码

event: async (parent: any, args: { id: number }) => {
      const eventRepository = getConnection().getRepository(Event);
      const event = await eventRepository.findOne(args.id);
      return event;
    },

我设法通过使用findOne(args.id, { relations: ['host']}) 获得了一个工作版本,但我不喜欢这样,因为它似乎适合委派给 graphql 来处理。

【问题讨论】:

  • 请附上相关的解析器代码。

标签: javascript express graphql apollo-server typeorm


【解决方案1】:

你的解析器应该是这样的

const resolver = {

Query: {
    event: async (_: any, args: any) => {
      return await event.findOne(args.id);
    }
  },
  event: {
    host: async (parent: any, args: any, context: any) => {
      return await user.find({ id: parent.id });
    }
  }
};

【讨论】:

  • 这不是违背了使用graphql的目的吗?如果我必须手动编写所有这些嵌套的案例,我不会比使用 REST 时更好。
  • @BrandonOlivier 你找到答案了吗?我面临同样的问题 - 必须绘制出每个嵌套案例。
  • 恐怕我最终放弃了 GraphQL 以加快我的项目。
  • @BrandonOlivier 我认为这不准确。使用 REST 端点,您可能需要执行多个 API 调用来获取与该事件关联的事件和用户,而使用 GraphQL 您只需执行一个。关于您的问题,您可能不必为用户创建解析器。如果与事件存在数据库关系,您可以检索事件用户关系。如果用户总是被事件调用,那可能是最有效的。
猜你喜欢
  • 2020-08-01
  • 2019-10-14
  • 2015-02-08
  • 2018-08-27
  • 2019-10-26
  • 2020-06-30
  • 2019-04-24
  • 2019-09-24
  • 1970-01-01
相关资源
最近更新 更多