AppSync 和 GraphQL 枚举突变

Posted

技术标签:

【中文标题】AppSync 和 GraphQL 枚举突变【英文标题】:AppSync and GraphQL Enum mutations 【发布时间】:2018-11-21 03:51:45 【问题描述】:

我在 AppSync for GraphQL 中有以下架构

input CreateTeamInput 
    name: String!
    sport: Sports!
    createdAt: String


enum Sports 
    baseball
    basketball
    cross_country

type Mutation
    createTeam(input: CreateTeamInput!): Team

但是,当我尝试通过使用 AWS Amplify 库执行查询时

export const CreateTeam = `mutation CreateTeam($name: String!, $sport: String!)
  createTeam(input:name:$name, sport:$sport) 
    id,
    name,
    sport
  

`;

....

API.graphql(graphqlOperation(CreateTeam, this.state))

我收到以下错误:Validation error of type VariableTypeMismatch: Variable type doesn't match

如何更新我的代码以使用此枚举类型?

【问题讨论】:

你能提供你的突变定义吗?我们在这里不知道 createTeam 突变期望什么 @VasileiosLekakis 的帖子已更新为突变 【参考方案1】:

$sport 需要是 Sports 类型而不是 String

【讨论】:

我如何实际指定运动类型?我能够在服务器端使用的 schema.graphql 文件中创建它没有问题(在 enum Sports... 上方的代码 sn-p 中),但是如何从客户端请求创建它? 我无法在多行上添加评论,所以我在上面创建了一个答案。 @DanRamos【参考方案2】:

CreateTeamInput.sport 字段类型是枚举,因此您的 $sport 变量必须是枚举。

尝试将您的查询更改为:

export const CreateTeam = `mutation CreateTeam($name: String!, $sport: Sports!)
  createTeam(input:name:$name, sport:$sport) 
    id,
    name,
    sport
  
;

注意: 作为惯例,最好对枚举值使用大写字母,以便将它们与字符串区分开来。

enum SPORTS 
    BASEBALL
    BASKETBALL
    CROSS_COUNTRY

【讨论】:

好吧,这对我来说是个脑残。我的假设是因为“体育”的模式类型只存在于我的 graphql 服务器上,客户端查询会知道如何处理$sports: Sports!,但它工作得很好。谢谢!

以上是关于AppSync 和 GraphQL 枚举突变的主要内容,如果未能解决你的问题,请参考以下文章

使用 Graphql 和 Amplify/AppSync 基于先前值的突变

Appsync 客户端对 GraphQL 突变的 Angular 订阅

使用 AWS Amplify/AppSync 的嵌套 GraphQL 突变

aws amplify appsync 中的 Graphql 突变错误

在 Graphql 操场上使用 AWS Cognito 用户池对 AppSync 突变进行身份验证

通过 AWS AppSync 中的突变更新 GraphQL 数据时出错