【问题标题】:Vue.js using aws AppSync has GraphQL Validation error of type Unknow Type使用 aws AppSync 的 Vue.js 具有 Unknow Type 类型的 GraphQL 验证错误
【发布时间】:2023-03-12 08:13:01
【问题描述】:

我让这个查询在 AppSync 控制台中完美运行,没有问题:

 query listTftTeamCombos {
      listTftTeamCombos {
        items {
          sortId
          teamId
        }
      }
    }

但是当我尝试在本地 ide 中使用 Vue.js 时,它给了我验证错误:

Validation error of type UnknownType: Unknown type TableTftTeamComboFilterInput

我设法提出了两个查询,但没有一个有效:

export const test1 = /* GraphQL */ `
  query ListTftTeamCombos(
    $filter: TableTftTeamComboFilterInput
    $limit: Int
    $nextToken: String
  ) {
    listTftTeamCombos(filter: $filter, limit: $limit, nextToken: $nextToken) {
      items {
        sortId
        teamId
      }
      nextToken
    }
  }
`;

第二次查询:

export const test2 = /* GraphQL */ `
    query ListTftTeamCombos{
        items: {
          sortId: $sortId
          teamId: $teamId
        }
    }

这是来自 appsync 控制台的原始模式。 (在生成长且不可读的 schema.graphql 之前。)

input CreateTftTeamComboInput {
    sortId: String!
    teamId: String!
}

input DeleteTftTeamComboInput {
    sortId: String!
    teamId: String!
}

type Mutation {
    createTftTeamCombo(input: CreateTftTeamComboInput!): TftTeamCombo
    updateTftTeamCombo(input: UpdateTftTeamComboInput!): TftTeamCombo
    deleteTftTeamCombo(input: DeleteTftTeamComboInput!): TftTeamCombo
}

type Query {
    getTftTeamCombo(teamId: String!, sortId: String!): TftTeamCombo
    listTftTeamCombos(filter: TableTftTeamComboFilterInput, limit: Int, nextToken: String): TftTeamComboConnection
}

type Subscription {
    onCreateTftTeamCombo(sortId: String, teamId: String): TftTeamCombo
        @aws_subscribe(mutations: ["createTftTeamCombo"])
    onUpdateTftTeamCombo(sortId: String, teamId: String): TftTeamCombo
        @aws_subscribe(mutations: ["updateTftTeamCombo"])
    onDeleteTftTeamCombo(sortId: String, teamId: String): TftTeamCombo
        @aws_subscribe(mutations: ["deleteTftTeamCombo"])
}

input TableBooleanFilterInput {
    ne: Boolean
    eq: Boolean
}

input TableFloatFilterInput {
    ne: Float
    eq: Float
    le: Float
    lt: Float
    ge: Float
    gt: Float
    contains: Float
    notContains: Float
    between: [Float]
}

input TableIDFilterInput {
    ne: ID
    eq: ID
    le: ID
    lt: ID
    ge: ID
    gt: ID
    contains: ID
    notContains: ID
    between: [ID]
    beginsWith: ID
}

input TableIntFilterInput {
    ne: Int
    eq: Int
    le: Int
    lt: Int
    ge: Int
    gt: Int
    contains: Int
    notContains: Int
    between: [Int]
}

input TableStringFilterInput {
    ne: String
    eq: String
    le: String
    lt: String
    ge: String
    gt: String
    contains: String
    notContains: String
    between: [String]
    beginsWith: String
}

input TableTftTeamComboFilterInput {
    sortId: TableStringFilterInput
    teamId: TableStringFilterInput
}

type TftTeamCombo {
    sortId: String!
    teamId: String!
}

type TftTeamComboConnection {
    items: [TftTeamCombo]
    nextToken: String
}

input UpdateTftTeamComboInput {
    sortId: String!
    teamId: String!
}

文件 schema.json 是使用命令amplify add codege 自动生成的,我没有更改它。

我应该修改 schema.json 以使我的查询正常工作还是我在构造查询时犯了一个错误?

提前致谢。

【问题讨论】:

  • 您能分享一下您的架构是什么样的吗?

标签: vue.js graphql aws-amplify aws-appsync


【解决方案1】:

根据您提供的信息,您的 Vue 查询和 GraphQL 架构不匹配,即 TableTftTeamComboFilterInput 未在您的架构中定义。您在 AppSync 中的查询正在运行,因为您没有向它提供任何输入,因此没有验证错误。在此说明中,您的第二个查询应该是这样的:

export const test2 = /* GraphQL */ `
query listTftTeamCombos {
  listTftTeamCombos {
    items {
      sortId
      teamId
    }
  }
}

我认为您的查询方式存在问题。

【讨论】:

  • 我已经尝试过您的查询,它给了我语法错误:语法错误:预期名称,找到 ,我已附上 amplify 自动生成的架构,非常感谢您的帮助。
  • 对不起,我错过了右括号。更新了查询。
  • 听起来有点傻,但请确保您的 schema.json 已更新 (npm run-script update-schema) 并验证 TableTftTeamComboFilterInput 是否在您的架构中。我尝试使用 Playground 测试您的代码,但除非我拼错 TableTftTeamComboFilterInput,否则我没有收到任何错误。
  • 你的最新查询给了我'FieldUndefined 类型的验证错误:'Query' 类型中的字段'listTftTeamCombos' 未定义@'listTftTeamCombos'' 错误,因为我无法运行(npm run-script update -schema)所以我去了 appsync 控制台,下载并替换了本地路径中的 schema.json 文件,它仍然无法正常工作。我什至重命名了 schema.json 中的查询,但仍然不起作用。
  • 在您的帮助下,我得到了它如何工作的提示,当我定义“查询”时,它应该查找在 schema.json 文件中定义的查询,然后查找查询名称“listTftTeamCombos”在里面。我确实检查了查询名称是否存在,但由于某种原因它给了我同样的错误。我删除了 node_modules 文件夹并安装了 npm,没有任何效果。
猜你喜欢
  • 2020-11-23
  • 2018-08-23
  • 2019-09-24
  • 2019-12-23
  • 1970-01-01
  • 2020-02-02
  • 2020-12-11
  • 2022-01-23
  • 2020-08-29
相关资源
最近更新 更多