【问题标题】:"Abstract type X must resolve to an Object type at runtime for field Query.user with value“对于具有值的字段 Query.user,抽象类型 X 必须在运行时解析为对象类型
【发布时间】:2020-04-18 13:11:09
【问题描述】:

这是我的代码

架构

gql`
  type Query {
    user: X!
  }
  type User {
    name: String!
  }
  type Time {
    age: Int!
  }
  union X = User | Time
`;

解析器

{
  X: {
    __resolveType: obj => {
      if (obj.name) return { name: "Amasia" };
      if (obj.age) return { age: 70 };
      return null;
    }
  },
  Query: {
    user: () => {
      return {
        name: "Amasia"
      };
    }
  }
}

请求

query {
user{
  ... on User {
    name
  }
  ... on Time {
    age
  }
}
}

当我提出请求时,我会得到错误

“抽象类型 X 必须在运行时为字段 Query.user 解析为对象类型,其值为 { name: \"Amasia\" }, received \"{ name: \"Amasia\" }\"。无论是 X type 应该提供一个 \"resolveType\" 函数,或者每个可能的类型都应该提供一个 \"isTypeOf\" 函数。"

是什么原因?

【问题讨论】:

    标签: node.js graphql-js apollo-server


    【解决方案1】:

    resolveType 函数应返回一个字符串,其中包含抽象类型应解析为的具体类型的名称。您正在返回一个对象,而不是字符串。在这种情况下,您应该返回"User""Time"

    【讨论】:

    • 感谢您提供此解决方案!它帮助了我!我也想补充。如果您正确设置了 resolveType 并且仍然收到错误,请检查您的查询返回的数据。我一直在寻找 obj.title 但事实证明,obj 是带有数组的 obj.Items,所以找不到 title 属性。
    猜你喜欢
    • 2017-01-03
    • 2020-05-31
    • 2017-06-12
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多