【问题标题】:Where do I specify the resolver for an interface type in Apollo server?我在哪里为 Apollo 服务器中的接口类型指定解析器?
【发布时间】:2019-12-11 03:49:48
【问题描述】:

如果我的 typeDefs 中有接口:

interface EntityBase @key(fields: "id") {
    ${commonEntProps}
}

然后我的解析器中还需要一个 resolveType,如下所示:

EntityBase: {
    __resolveType(entBase, context, info) {
        if (entBase.name) {
            return 'Entity';
        }

        if (entBase.email) {
            return 'User';
        }

        return null;
    }
},

这我明白,但我不明白我在哪里或如何为 __resolverType 返回的类型声明解析器。我不是指 Entity 或 User 的属性,我是指 Entity 和 User 本身的类型,它们都已经在解析器对象中定义了它们的属性。

如何告诉服务器执行哪个方法来返回实体或用户?

【问题讨论】:

    标签: graphql apollo apollo-server


    【解决方案1】:

    简短的回答:你不知道。

    联合和接口是 GraphQL在运行时解析为具体对象类型的抽象类型(在本例中为 Entity 或 User)。如果您有一些返回EntityBases 列表的字段,您将从数据库或其他数据源中获取数据以获取这些对象。然后 GraphQL 将使用提供的 resolveType 函数来确定列表中每个对象的类型。对象的类型与实际查询相结合,然后确定响应的形状。

    您不能使用对象的类型来确定获取对象的方法,因为它的类型是由获取的数据决定的。

    【讨论】:

      猜你喜欢
      • 2021-08-22
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      相关资源
      最近更新 更多