2017-04-25 53 views
2

我一直在使用graphql-js的Node服務器中使用GraphQL,而GraphQL已經證明是一個非常有價值的抽象,但我遇到了一個問題。將複雜參數傳遞給GraphQL突變

我經常發現自己需要將大型結構化對象作爲參數傳遞給GraphQL突變,使用GraphQLInputObjectType。這將是罰款,但GraphQL不支持使用JSON符號:(,所以我最終只是發送包含JSON字符串,服務器處理。

const objectStr = JSON.stringify(object).replace(new RegExp("\"", "g"), "'") 

graphQLClient(`{ 
    user: updateUser(someDataObject: "${objectStr}") {...} 
}`) 

但現在我不從GraphQL受益了!

我有一種感覺,我錯在這裏做一些事情。什麼是發送,比如,註冊表單數據,以突變的方式GraphQL?

回答

1

做的最好的方法這是使用輸入對象

本質上你的請求看起來像:

/* Query */ 
mutation Update($input: UpdateUserInput!) { 
    updateUser(input: $input) { 
     changedUser { 
      id 
      username 
     } 
    } 
} 

/* Variables (as JSON) */ 
{ 
    "input": { 
     "username": "[email protected]", 
     "password": "SuperSecretPassword" 
    } 
} 

你會傳遞到有效載荷的內容主體在POST請求,因爲這:

{ 
    "query": <GraphQL query from above as a string>, 
    "variables": <JSON object from above> 
} 

如果你想更深入的解釋,你可以檢查出Scaphold's Docs for updating data來幫助你組織你的API 。

希望這會有所幫助!

+1

此解決方案的缺失部分是在哪裏以及如何定義UpdateUserInput。 – mhlavacka