如何在 Apollo GraphQL 解析器的一个函数中解析 2 种不同的方法?

Posted

技术标签:

【中文标题】如何在 Apollo GraphQL 解析器的一个函数中解析 2 种不同的方法?【英文标题】:How to resolve 2 different methods in one function on Apollo GraphQL resolver? 【发布时间】:2019-04-25 13:19:46 【问题描述】:

我有这个解析器

SLAccount: (_,  imsUserId, imsToken , context) =>
  new Promise((resolve, reject) => 
    addAuth(context, imsUserId, imsToken);
    context.model
      .getUserAccount(getEndpoint(imsUserId, imsToken))
      .then(resolve)
      .catch(reject);
  ),

但我需要在其中包含另一种方法/模型:

  getHardware(endpoint) 
    return this.connector
      .get(
        `$endpoint/...`,
      )
      .catch(res => this.handleError(res));
  

所以我需要这样的东西:

SLAccount: (_,  imsUserId, imsToken , context) =>
  new Promise((resolve, reject) => 
    addAuth(context, imsUserId, imsToken);
    context.model
      .getUserAccount(getEndpoint(imsUserId, imsToken))
      .then(resolve)
      .catch(reject);

    context.model
      .getHardware(getEndpoint(imsUserId, imsToken))
      .then(resolve)
      .catch(reject);
  ),

问题是我不需要同时调用它们,有时我只需要 SLAccount 中的这些方法/模型之一。

那么处理这个问题的最佳方法是什么?

【问题讨论】:

【参考方案1】:

GraphQL 由需求(查询)驱动。

当您需要 account 时,只需查询即可。当您需要 account 和相关的 hardware 时,只需查询两者 - 将自动调用额外的解析器。这是 graphQL 背后的基本思想。寻找任何涉及 graphQL 关系的教程。

【讨论】:

以上是关于如何在 Apollo GraphQL 解析器的一个函数中解析 2 种不同的方法?的主要内容,如果未能解决你的问题,请参考以下文章

Apollo Server v2 - 未调用 GraphQL 解析器

如何在 apollo graphql 服务器中编写解析 graphql 过滤器

如何使用 Apollo 分离 GraphQL 模式和解析器文件?

如何在 Apollo GraphQL Server 中添加字段解析器

设计表单构建器的数据库和状态突变和请求,以与 graphQL、动物数据库、nextJS 和 Apollo 做出反应

如何使用 Apollo Express 仅为 Graphql 后端中的特定解析器设置中间件?