2017-05-24 65 views
1

我有以下GraphQLEnumType如何突變傳遞GraphQLEnumType作爲字符串值

const PackagingUnitType = new GraphQLEnumType({ 
    name: 'PackagingUnit', 
    description: '', 
    values: { 
    Carton: { value: 'Carton' }, 
    Stack: { value: 'Stack' }, 
    }, 
}); 

在突變查詢,如果我通過PackagingUnit值紙箱(不帶引號),它的工作原理。但如果我傳遞字符串'紙箱'它拋出以下錯誤

In field "packagingUnit": Expected type "PackagingUnit", found "Carton" 

有沒有辦法從客戶端通過枚舉作爲字符串?

編輯: 我在我的前端有一個表單,我從用戶那裏收集PackagingUnit類型以及其他字段。 PackagingUnit類型在前端表示爲一個字符串(不是graphQL Enum類型),由於我沒有使用Apollo Client或Relay,我必須自己構造graphQL查詢字符串。 現在我正在將表單數據收集爲JSON,然後執行JSON.stringify(),然後刪除屬性上的雙引號以獲得最終的GraphQL兼容查詢。

例如。我的表格有兩個字段packagingUnitType(安GraphQLEnumType)和noOfUnits(安GraphQLFloat) 我的JSON結構是透過JSON.stringify()

{ 
    packagingUnitType: "Carton", 
    noOfUnits: 10 
} 

將它轉換爲字符串

'{"packagingUnitType":"Carton","noOfUnits":10}' 

,然後刪除雙引號在性能

{packagingUnitType:"Carton",noOfUnits:10} 

現在,這可以傳遞給graphQL服務器一樣

newStackMutation(input: {packagingUnitType:"Carton", noOfUnits:10}) { 
... 
} 

僅當枚舉值沒有任何引號時纔有效。像下面

newStackMutation(input: {packagingUnitType:Carton, noOfUnits:10}) { 
... 
} 

感謝

+0

您是使用Relay,Apollo還是使用GraphiQL或等效方式發出請求? – whitep4nther

+0

我沒有使用任何這些。我正在構建查詢並向graphiql服務器發出發佈請求。但我在GraphiQL中試過,它不允許我將字符串傳遞給Enum。 – krishnan

+0

這是正常的,因爲這是一個枚舉,你需要輸入沒有字符串的值。你爲什麼要把它作爲一個字符串傳遞? – whitep4nther

回答

1

GraphQL查詢可以接受的變量。這對你來說更容易,因爲你不需要做一些棘手的字符串連接。

我想你使用GraphQLHttp或類似的。要發送您的變量一起查詢,發送一個JSON機身採用了query鍵和variables鍵:

// JSON body 
{ 
    "query": "query MyQuery { ... }", 
    "variables": { 
    "variable1": ..., 
    } 
} 

查詢語法是:

query MyMutation($input: NewStackMutationInput) { 
    newStackMutation(input: $input) { 
    ... 
    } 
} 

然後,你可以通過你的變量爲:

{ 
    "input": { 
    "packagingUnitType": "Carton", 
    "noOfUnits": 10 
    } 
} 

GraphQL就會明白packagingUnitType是一個枚舉類型,並會做轉換爲你。

相關問題