info.fieldASTs(解析参数)来自何处以及在何处?

时间:2017-04-04 17:09:15

标签: graphql graphql-js

我已经阅读了很多关于graphql的资源,但不知怎的,我需要帮助来理解graphqls的解析参数。这是代码(来自fullstack的反应):

resolve(source, args, context, info) {
 let includeFriends = false;
const selectionFragments = info.fieldASTs[0].selectionSet.selections;
const userSelections = selectionFragments.filter((selection) => {
return selection.kind === 'InlineFragment' && selection.typeCondition.\
name.value === 'User';
})

希望有人分享一些关于graphql的解析功能的资源,这些是什么 - > (source,args,context,info)参数?他们来自哪里?如何在代码上看到fieldAST?我查看schema.json文件,看不到它来自哪里,我怎么看?

1 个答案:

答案 0 :(得分:2)

resolve函数的目的是返回GraphQL查询中请求的每个字段的数据。

  

这些是什么 - > (source,args,context,info)参数?

  • source - 从父类型字段
  • 解析的对象
  • args - 该字段的GraphQL参数
  • context - 可以传递给GraphQL的任意上下文值
  • info - a.k.a."解决信息"拥有所有你可能想知道的GraphQL查询(它的AST,片段,变量等),以及正在执行的模式(字段名称,类型等)。
  

他们来自哪里?如何在代码上看到fieldAST?

这取决于您使用的GraphQL实现。我假设您使用的是Facebook the Node.js reference implenatation。大多数开发人员可能不需要查看解析信息来解析他们的数据,因为它主要处理内部问题。但是如果你想了解它是如何生成的,那么你需要阅读源代码。 Here是在GraphQL执行阶段创建解析信息的地方。

要生成您自己的schema.json,您可以使用从printSchema导入的graphql/utilities函数:

import { graphql }  from 'graphql'
import { introspectionQuery, printSchema } from 'graphql/utilities'

/*
  generates json of our schema for use by relay
 */
export default function (schema) {
  return new Promise((resolve, reject) => {
    graphql(schema, introspectionQuery).then(result => {
      if (result.errors) {
        console.error(`ERROR introspecting schema: ${result.errors}`)
        reject(new Error(result.errors))
      } else {
        resolve({ json: result, graphql: printSchema(schema) })
      }
    })
  })
}