从字段解析器上的父节点获取数据
Posted
技术标签:
【中文标题】从字段解析器上的父节点获取数据【英文标题】:Get data from parent node on field resolver 【发布时间】:2016-10-03 01:46:25 【问题描述】:所以如果可能的话,我正在尝试做一个像这样的GraphQL
:
people
_id
name
acted
_id
title
coactors
name
所以我正在做的是让演员(人),然后让他们演的电影,效果很好。所以我正试图找到那部电影的合作演员。我正在考虑将当前演员的 id 作为这样的参数传递给 co-actors 字段:
people
_id
name
acted
_id
title
coactors(actor: people._id)
name
显然,我遇到了一个错误,不知道这是否可以在内部进行。
这是我的类型:
const MovieType = new GraphQLObjectType( 名称:'电影', 字段:()=>( _ID: 类型:GraphQLInt , 标题: 类型:GraphQLString , 标语: 类型:GraphQLString , 发布: 类型:GraphQLInt , 演员: 类型:新的 GraphQLList(PersonType), 解决:(电影)=> 返回 []; , 合作者: 类型:新的 GraphQLList(PersonType), 参数: 演员: 类型:GraphQLInt , 解决:(电影,参数)=> getCoActorsFor(movie, args.actor) // 我怎样才能做这样的事情 .then((演员) => 返回演员; ) ) ); const PersonType = new GraphQLObjectType( 名称:'人', 字段:()=>( _ID: 类型:GraphQLInt , 姓名: 类型:GraphQLString , 出生: 类型:GraphQLInt , 行动: 类型:新的 GraphQLList(MovieType), 解决:(人)=> 返回 []; ) );【问题讨论】:
【参考方案1】:如果不将查询分成两个查询,这是不可能的,因此您可以将第一个查询的结果作为变量提供给参与者以提供给第二个查询。
您可以让“acted”返回的电影对象包含对演员的引用,而不是使用变量,而不是当您要求“coactors”时,您手头有该信息来做您想做的事情做。
然而,这种类型的 API 也是一种反模式——如果子对象依赖于父对象的上下文,那么缓存和理解就会困难得多。我认为您应该问自己为什么 Movie 对象必须返回除了演员之外的合作者。如果 coactors 只是相同的 actor 列表,但删除了原始 actor,那么这似乎很容易在上下文信息更容易获得的客户端上发生。
【讨论】:
是的,我可以将它处理到客户端,我想知道是否有办法访问父节点,我在想也许当我们定义 de QueryType (?)以上是关于从字段解析器上的父节点获取数据的主要内容,如果未能解决你的问题,请参考以下文章