Apollo GraphQL-Tools:更改默认的解析器行为

时间:2018-04-19 03:05:00

标签: graphql apollo-server

graphql-tools documentation提及:

  

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

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

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

例如,当客户端要求object.title字段时,我可能会返回titleobject.title.en等,而不是仅返回object.title.fr。在当前的语言。

能够将此指定为默认行为而不必为每个字段拼出解析器函数会很好吗?

2 个答案:

答案 0 :(得分: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
  }
 }
}

答案 1 :(得分:1)

您可以将fieldResolver方法传递给apollo服务器实例的选项:

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