Apollo GraphQL Server中的别名字段

问题描述 投票:0回答:1

别名非常方便,在为特定解析器别名时效果很好。例如:

{
  admins: users(type:"admin"){
    username
  }
  moderators: users(type:"moderators"){
    moderators
  }
}

不过,我不确定如何处理字段的别名。例如:

{
  site_stats {
    hits: sum(field: "hits")
    bounces: sum(field: "bounces")
  }
}

如果解析器返回任何sum值,则相同的值将同时作为hitsbounces的别名(这很有意义,因为甚至只能返回一个总和值)。如果让解析器在返回结果时使用别名作为字段名称,则hitsbounces都将变为null

我可以简单地将这些字段分解为单独的解析器,但这会使前端开发人员的集成变得复杂。因为我可以将单个查询中需要的所有数据聚合到我们的数据源(我们正在使用ElasticSearch),所以我们还将损失大量的效率优势。

非常感谢您的天才!

node.js graphql apollo apollo-server
1个回答
0
投票

听起来好像您将所有逻辑都放在根级解析程序(site_stats)内,而不是为sum字段提供解析程序。换句话说,如果您的解析器看起来像这样:

const resolvers = {
  Query: {
    site_stats: () => {
      ...
      return { sum: someValue }
    },
  },
}

您应该改为执行以下操作:

const resolvers = {
  Query: {
    site_stats: () => {
      return {} // empty object
    },
  },
  SiteStats: {
    sum: () => {
      ...
      return someValue
    },
  },
}

这样,您就不会从父项传递和的值,而不会依赖默认的解析器-您在其解析器中显式提供sum的值。由于将使用特定于该别名的参数为每个别名分别调用sum解析器,因此每个别名将相应地进行解析。

© www.soinside.com 2019 - 2024. All rights reserved.