Apollo GraphQL工具:更改默认解析器行为

Apollo GraphQL工具:更改默认解析器行为,graphql,apollo-server,Graphql,Apollo Server,报告提到: 您不需要为模式中的每种类型指定解析程序。如果 如果不指定解析程序,GraphQL.js将返回默认解析程序, 以下哪项功能: 从obj返回具有相关字段名的属性,或 使用相关字段名调用obj上的函数,并将查询参数传递给该函数 我的问题是:如何指定该函数来更改默认行为 例如,当客户端请求title字段时,可能不只是返回object.title,而是根据当前语言返回object.title.en或object.title.fr等 如果能够将其指定为默认行为,而不必为每个字段详细说明解析器函数

报告提到:

您不需要为模式中的每种类型指定解析程序。如果 如果不指定解析程序,GraphQL.js将返回默认解析程序, 以下哪项功能:

  • 从obj返回具有相关字段名的属性,或
  • 使用相关字段名调用obj上的函数,并将查询参数传递给该函数
  • 我的问题是:如何指定该函数来更改默认行为

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


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

    要保持与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
      }
     }
    }
    

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

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

    我认为您必须编写一个函数并对所有字段重复使用它,我猜最短的方法似乎确实有一种方法可以覆盖默认的解析器函数:但到目前为止,还没有运气让它实际执行任何操作。