我有以下GraphQLEnumType
const PackagingUnitType = new GraphQLEnumType({
name: 'PackagingUnit',
description: '',
values: {
Carton: { value: 'Carton' },
Stack: { value: 'Stack' },
},
});
如果我将PackagingUnit值作为Carton(没有引号)传递,则在突变查询中,它可以正常工作。但是,如果我作为字符串' Carton'它抛出以下错误
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结构是
{
packagingUnitType: "Carton",
noOfUnits: 10
}
使用JSON.stringify()
将其转换为字符串'{"packagingUnitType":"Carton","noOfUnits":10}'
然后删除属性上的doubleQuotes
{packagingUnitType:"Carton",noOfUnits:10}
现在可以将其传递给graphQL服务器,如
newStackMutation(input: {packagingUnitType:"Carton", noOfUnits:10}) {
...
}
仅当枚举值没有任何引号时才有效。如下所示
newStackMutation(input: {packagingUnitType:Carton, noOfUnits:10}) {
...
}
由于
答案 0 :(得分:1)
GraphQL查询可以接受变量。这对你来说会更容易,因为你不必做一些棘手的字符串连接。
我想你使用GraphQLHttp - 或类似的。要在查询中发送变量,请发送带有query
密钥和variables
密钥的JSON正文:
// JSON body
{
"query": "query MyQuery { ... }",
"variables": {
"variable1": ...,
}
}
查询语法为:
query MyMutation($input: NewStackMutationInput) {
newStackMutation(input: $input) {
...
}
}
然后,您可以将变量传递为:
{
"input": {
"packagingUnitType": "Carton",
"noOfUnits": 10
}
}
GraphQL会理解packagingUnitType
是一种枚举类型,并会为您进行转换。