首页 文章

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

提问于
浏览
2

我有以下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 回答

  • 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 是一个枚举类型,并将为您进行转换 .

相关问题