Apollo Server Stitching - 在解析器中获取父级的父级

Posted

技术标签:

【中文标题】Apollo Server Stitching - 在解析器中获取父级的父级【英文标题】:Apollo Server Stitching - Get parent of parent in resolver 【发布时间】:2020-08-12 20:55:28 【问题描述】:

我有一个基于https://www.apollographql.com/docs/graphql-tools/schema-stitching/的问题

假设我有以下架构(请注意,它是为示例而构建的,以这种方式构造它是没有意义的)

//First schema
type User 
  id
  cars: [Car]!


type Car 
  id
  name: String
  model: String


//Second schema
type Color 
  id
  name: String
  rgb: String
  opacity: Int


//Defined in Apollo Server
extend type Car 
  color: Color

以下解析器用于

resolvers: 
  Car: 
    color: 
      fragment: '... on Car  id ',
      resolve(parent, args, context, info) 
        return delegateToSchema(
          schema: secondSchema,
          operation: 'query',
          fieldName: 'colorByUserAndCarId',
          args: 
            id: parent.id,
            userId: ?
          ,
          context,
          info,
        );
      ,
    ,
  ,

如何获取 userId,它是 User 类型而不是 Car?

当我在寻找这个问题的答案时,我想到了一些解决方案,但我不知道如何使它们中的任何一个起作用..

使Color 类型成为Car 的一部分,这样我就可以直接在汽车中使用每种颜色的字段,所以我想我会使用基于用户的解析器..? 将片段更改为'... on User',同时使用Car 类型,但到目前为止这不起作用。 通过扩展将 userId 添加到类型 Car,但我仍然找不到如何获取 userId

不能从根目录更改架构和类型,所有修改都需要在 Apollo Server 中进行。

【问题讨论】:

【参考方案1】:

写下问题和可能的解决方案有助于我更好地理解它是如何工作的以及如何实现这一点。

我可以像添加“颜色”一样为“汽车”添加解析器,当我进入我的汽车解析器时,“汽车”的对象值已经存在。parent 值将看起来像 id: x, car: ...iduserId,所以我可以在我的汽车解析器中完成此操作

let myCar = parent.car;
myCar.userId = parent.id;
return myCar;

当我使用我的颜色解析器时,我将能够执行parent.userId

【讨论】:

以上是关于Apollo Server Stitching - 在解析器中获取父级的父级的主要内容,如果未能解决你的问题,请参考以下文章

使用“apollo-server-azure-functions”的 Apollo 订阅

Apollo-Server,如何与 SailsJS 一起使用?

在客户端处理 apollo-server 错误

如何使用 apollo-server 进行缓存

找不到模块:无法解析“apollo-link-context”-REACT,APOLLO-SERVER

Apollo-Server-Express 未收到上传对象