使用片段的联合类型进行中继查询会导致“片段无法在此处传播”错误

时间:2019-11-22 20:31:41

标签: graphql apollo relayjs

我将一些服务设置为Apollo联合服务的数据源。每个数据源服务都描述一个Node interfaceinterface Node { id: ID!}-此interface由具有唯一ID的每个type实现。

我在前端使用Relay来生成查询,它在对Union模型的查询中引入了Node片段。当我运行一个查询时,该查询依赖于从两个服务中获取的数据,其中一个服务尝试解决实现Node接口的每个模型上的Node选择,甚至是从那些类型不相同的类型中,都会发生错误。在服务上不存在。当我从中继生成的查询中删除Node片段时,它再次起作用。

这是设置:

用户数据源架构:

interface Node {
    id: ID!
}

type User implements Node @key(fields: "id") {
    id: ID!
    email: String!
    firstName: String!
    lastName: String!
    phoneNumber: String
}

帐户数据源架构:

interface Node {
    id: ID!
}

enum AccountType {
    ADMIN
    CUSTOMER
}

extend type User @key(fields: "id") {
    id: ID! @external
    email: String! @external
    account(type: AccountType!): Account
}

union Account = AdminAccount | CustomerAccount

enum AccountStatus = {
    OPEN
    CLOSED
}

type AdminAccount implements Node {
    id: ID!
    status: AccountStatus!
    // other fields
}

type CustomerAccount implements Node {
    id: ID!
    status: AccountStatus!
    // other fields
}

在Postman / Prisma游乐场中运行的查询:

query {
    user {
        id
        firstName
        lastName
        phoneNumber
        account(type:ADMIN){
            ... on AdminAccount {
                status
            }
        }
    }
}

中继生成的查询会导致错误:

query {
    user {
        id
        firstName
        lastName
        phoneNumber
        account(type:ADMIN){
            ... on AdminAccount {
                status
                ... on Node {
                    id
                }
            }
        }
    }
}

我遇到了两种类型的一系列错误:

"GraphQLError: Fragment cannot be spread here as objects of type \"Account\" can never be of type \"User\".",

Unknown type \"[type from other data source]\". Did you mean \"[type from Accounts data source]\" or \"[other type from Accounts data source]\"?"

实现types接口的其他Node都会重复出现这两个错误。

我是否在查询中遗漏了一些东西,这些东西会指导解析器解决该查询?

0 个答案:

没有答案