首页 > 解决方案 > 使用 aws AppSync 的 Vue.js 具有 Unknow Type 类型的 GraphQL 验证错误

问题描述

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

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

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

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.jsgraphqlaws-amplifyaws-appsync

解决方案


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

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

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


推荐阅读