如何将GraphQLEnumType作为字符串值传递到变异中

如何将GraphQLEnumType作为字符串值传递到变异中,graphql,graphql-js,Graphql,Graphql Js,我有以下图形类型 const PackagingUnitType = new GraphQLEnumType({ name: 'PackagingUnit', description: '', values: { Carton: { value: 'Carton' }, Stack: { value: 'Stack' }, }, }); 在一个变异查询中,如果我将PackagingUnit值传递为Carton(不带引号),它就会工作。但如果我作为字符串“Cart

我有以下图形类型

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类型以及其他字段。PackageUnit类型在前端表示为字符串(不是graphQL枚举类型),因为我没有使用Apollo客户端或中继,所以我必须自己构造graphQL查询字符串。 现在,我正在以JSON的形式收集表单数据,然后执行JSON.stringify(),然后删除属性上的双引号,以获得最终的与graphQL兼容的查询

我的表单有两个字段packagingUnitType(一个GraphQLEnumType)和noOfUnits(一个GraphQLFloat) 我的json结构是

{ 
  packagingUnitType: "Carton",
  noOfUnits: 10
}
使用JSON.stringify()将其转换为字符串

然后删除属性上的双引号

{packagingUnitType:"Carton",noOfUnits:10}
现在可以将其传递到graphQL服务器,如

newStackMutation(input: {packagingUnitType:"Carton", noOfUnits:10}) {
...
}
这仅在枚举值没有任何引号时有效。如下

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

谢谢,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将理解包装单元类型是一种枚举类型,并将为您进行转换。

您使用的是中继、Apollo还是使用GraphiQL或等效工具提出请求?我没有使用任何这些。我正在构造查询并向graphiql服务器发出post请求。但我在GraphiQL中尝试了这个方法,它不允许我以字符串形式传递枚举。这是正常的,因为这是一个枚举,您需要键入不带字符串的值。为什么要将其作为字符串传递?我已更新了我的问题。谢谢
{
  "input": {
    "packagingUnitType": "Carton",
    "noOfUnits": 10
  }
}