Apollo GraphQL工具:更改默认解析器行为
报告提到: 您不需要为模式中的每种类型指定解析程序。如果 如果不指定解析程序,GraphQL.js将返回默认解析程序, 以下哪项功能:Apollo GraphQL工具:更改默认解析器行为,graphql,apollo-server,Graphql,Apollo Server,报告提到: 您不需要为模式中的每种类型指定解析程序。如果 如果不指定解析程序,GraphQL.js将返回默认解析程序, 以下哪项功能: 从obj返回具有相关字段名的属性,或 使用相关字段名调用obj上的函数,并将查询参数传递给该函数 我的问题是:如何指定该函数来更改默认行为 例如,当客户端请求title字段时,可能不只是返回object.title,而是根据当前语言返回object.title.en或object.title.fr等 如果能够将其指定为默认行为,而不必为每个字段详细说明解析器函数
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;
}
});
我认为您必须编写一个函数并对所有字段重复使用它,我猜最短的方法似乎确实有一种方法可以覆盖默认的解析器函数:但到目前为止,还没有运气让它实际执行任何操作。