如何将变量中的GraphQLEnumType作为字符串值传递

时间:2017-05-24 13:30:32

标签: graphql graphql-js

我有以下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}) {
...
}

由于

1 个答案:

答案 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是一种枚举类型,并会为您进行转换。