2017-04-04 76 views
1

我已經閱讀了很多關於graphql的資源,但不知怎的,我需要幫助來理解graphqls的解析參數。這裏是代碼(從fullstack反應):info.fieldASTs(解析參數)來自哪裏?

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的決心功能的一些資源,什麼是these->(源,指定參數時,語境,信息)的參數?他們來自哪裏?以及如何在代碼上看到fieldAST?我看着schema.json文件,看不到它來自哪裏,我怎麼能看到它?

回答

2

resolve函數的作用是返回在GraphQL查詢中請求的每個字段的數據。

這些 - >(源,參數,上下文,信息)參數是什麼?

  • 源 - 從場解析父類型的對象
  • ARGS - 的GraphQL參數對於該字段
  • 上下文 - 可在被傳遞給GraphQL
  • 任意上下文值信息 - 也就是「解決信息」有一切你可能都想知道關於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) }) 
     } 
    }) 
    }) 
} 
+1

我讀這http://pcarion.com/2015/09/27/GraphQLResolveInfo/,他已經產生schema.json中的fieldAST?我該怎麼做我的? –

+0

我更新了我的答案,以包含如何生成'schema.json'的片段。 –

+0

如何創建源參數?它來自根查詢嗎?它是如何通過那裏的? –