【发布时间】:2017-10-24 21:15:04
【问题描述】:
我有以下 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 (An GraphQLEnumType) 和 noOfUnits (An GraphQLFloat) 我的 json 结构是
{
packagingUnitType: "Carton",
noOfUnits: 10
}
使用 JSON.stringify() 将其转换为字符串
'{"packagingUnitType":"Carton","noOfUnits":10}'
然后删除属性上的双引号
{packagingUnitType:"Carton",noOfUnits:10}
现在可以像这样将其传递给 graphQL 服务器
newStackMutation(input: {packagingUnitType:"Carton", noOfUnits:10}) {
...
}
仅当枚举值没有任何引号时才有效。如下所示
newStackMutation(input: {packagingUnitType:Carton, noOfUnits:10}) {
...
}
谢谢
【问题讨论】:
-
您是在使用 Relay、Apollo,还是在 GraphiQL 或同等工具中发出请求?
-
我没有使用任何这些。我正在构建查询并向 graphiql 服务器发出发布请求。但我在 GraphiQL 中尝试过,它不允许我将枚举作为字符串传递。
-
这是正常的,因为这是一个枚举,你需要输入不带字符串的值。为什么要将它作为字符串传递?
-
我更新了我的问题。谢谢
标签: graphql graphql-js