在字段解析器上从父节点获取数据

2024-05-07

所以我想做的是GraphQL如果可能的话像这样:

{
  people {
    _id
    name
    acted {
      _id
      title
      coactors {
        name
      }
    }
  }
}

所以我正在做的就是找演员(人),然后找他们演的电影,效果很好。所以我正在努力寻找那部电影的合作演员。我正在考虑将当前演员的 id 作为参数传递给 coactors 字段,如下所示:

{
  people {
    _id
    name
    acted {
      _id
      title
      coactors(actor: people._id) {
        name
      }
    }
  }
}

显然,我遇到了错误,并且不知道这是否可以在内部完成。

这是我的类型:



const MovieType = new GraphQLObjectType({
    name: 'movie',
    fields: () => ({
        _id: {
            type: GraphQLInt
        },
        title: {
            type: GraphQLString
        },
        tagline: {
            type: GraphQLString
        },
        released: {
            type: GraphQLInt
        },
        actors: {
            type: new GraphQLList(PersonType),
            resolve: (movie) => {
                return [];
            }
        },
        coactors: {
            type: new GraphQLList(PersonType),
            args: {
                actor: {
                    type: GraphQLInt
                }
            },
            resolve: (movie, args) => {
                getCoActorsFor(movie, args.actor) // How can I do something like this
                    .then((actors) => {
                        return actors;
                    })
            }
        }
    })
});

const PersonType = new GraphQLObjectType({
    name: 'person',
    fields: ()=> ({
        _id: {
            type: GraphQLInt
        },
        name: {
            type: GraphQLString
        },
        born: {
            type: GraphQLInt
        },
        acted: {
            type: new GraphQLList(MovieType),
            resolve: (person) => {

                return [];

            }
        }
    })
});
  

如果不将查询分成两个查询,这是不可能的,因此您可以将第一个查询的结果作为变量提供给参与者提供给第二个查询。

您可以不使用变量,而是让“acted”返回的电影对象包含对演员的引用,例如当您请求“coactors”时,您手头有该信息来执行您想要执行的操作。

然而,这种类型的 API 也是一种反模式 - 如果子对象依赖于父对象的上下文,那么缓存和理解就会困难得多。我认为您应该问自己为什么 Movie 对象除了演员之外还必须返回合作者。如果协同参与者只是相同的参与者列表,但删除了原始参与者,那么这似乎很容易发生在客户端上,因为上下文信息更容易获得。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在字段解析器上从父节点获取数据 的相关文章

随机推荐