【问题标题】:Apollo GraphQL-Tools: changing the default resolver behaviorApollo GraphQL-Tools:更改默认解析器行为
【发布时间】:2018-09-29 10:12:35
【问题描述】:

graphql-tools documentation 提到:

您不需要为架构中的每种类型指定解析器。如果 你没有指定一个解析器,GraphQL.js 会回退到一个默认的, 它执行以下操作:

  1. 从 obj 中返回具有相关字段名称的属性,或者
  2. 使用相关字段名称调用 obj 上的函数并将查询参数传递给该函数

我的问题是:如何指定该函数来更改默认行为?

例如,当客户端请求title 字段时,可能不只是返回object.title,而是根据当前语言返回object.title.en,或object.title.fr 等。

如果能够将其指定为默认行为而不必为每个字段详细说明解析器函数,那该多好?

【问题讨论】:

标签: graphql apollo-server


【解决方案1】:

为了保持与 graphql 草稿的兼容性,您可以创建这样的架构:

# schema.gql (shortly)
type Post {
 id: ID!
 title: TranlationConnection
}
type TranslationConnection {
 count: Int
 nodes: [TranslationNode]
}
type TranslationNode {
 # eg. 'en' 
 lang: String!
 # translated title in this eg.
 msgstr: String!
}

#query eg.
query post (id:1) {
 id
 title(lang:'en') {
  nodes {
   lang
   msgstr
  }
 }
}

【讨论】:

    【解决方案2】:

    您可以将fieldResolver 方法传递给 apollo-server 实例的选项:

    const server = new ApolloServer({ typeDefs, resolvers,
      fieldResolver: function (source, args, context, info) {
        console.log("Field resolver triggered!")
        return null;
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 2018-12-22
      • 2014-12-13
      • 2021-01-25
      • 2019-02-16
      • 2021-09-25
      • 2020-01-28
      • 2020-07-22
      • 2017-01-11
      相关资源
      最近更新 更多