您需要解析作为其第四个参数传递给解析器的info 对象。这是对象的类型:
type GraphQLResolveInfo = {
fieldName: string,
fieldNodes: Array<Field>,
returnType: GraphQLOutputType,
parentType: GraphQLCompositeType,
schema: GraphQLSchema,
fragments: { [fragmentName: string]: FragmentDefinition },
rootValue: any,
operation: OperationDefinition,
variableValues: { [variableName: string]: any },
}
您可以自己遍历该领域的 AST,但使用现有库可能会更好。我推荐graphql-parse-resolve-info。还有许多其他库,但graphql-parse-resolve-info 是一个非常完整的解决方案,实际上由postgraphile 在后台使用。示例用法:
posts: (parent, args, context, info) => {
const parsedResolveInfo = parseResolveInfo(info)
console.log(parsedResolveInfo)
}
这将按照以下方式记录一个对象:
{
alias: 'posts',
name: 'posts',
args: {},
fieldsByTypeName: {
Post: {
author: {
alias: 'author',
name: 'author',
args: {},
fieldsByTypeName: ...
}
comments: {
alias: 'comments',
name: 'comments',
args: {},
fieldsByTypeName: ...
}
}
}
}
您可以遍历生成的对象并相应地构造您的 SQL 查询(或一组 API 请求,或其他)。