当前位置: 首页 > 知识库问答 >
问题:

Apollo服务器缝合-在解析器中获取父级的父级

姬奇思
2023-03-14

我有一个基于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上?

当我在寻找答案的时候,我想到了一些解决方案,但我不知道如何让它们发挥作用。。

  • 使类型颜色部分的汽车,所以我将有每种颜色的字段直接在汽车,所以我想我会有基于用户的解析器,而不是...?
  • 在用户上更改的片段,而在类型Car上,但到目前为止不起作用。
  • 通过扩展将userId添加到类型Car中,但无论如何我找不到如何获取userId

从根目录更改模式和类型不是一个选项,所有修改都需要在Apollo Server中进行。


共有1个答案

红弘盛
2023-03-14

写问题和潜在的解决方案帮助我更好地理解它是如何工作的,以及如何实现这一点。

我可以为汽车添加一个解析器,就像我为颜色添加解析器一样,当我进入汽车解析器时,“汽车”的对象值已经存在了...值看起来像{id:x,car:{...}}iduserId,所以我可以在我的汽车解析器中执行此操作

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

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

 类似资料:
  • 问题内容: 我想在脚本中定义不同的子解析器,两个子解析器均从同一个父级继承选项,但具有不同的默认值。但是,它没有按预期工作。 这是我所做的: 当我从命令行运行脚本时,得到的是: 显然,第二个覆盖了父对象中的第一个。由于argparse文档中没有任何内容(非常详细),所以我认为这可能是一个错误。 有一些简单的解决方案吗?之后,我可以检查变量,并使用每个子解析器的预期默认值替换值,但这就是我期望arg

  • 所以我想做的是,如果可能的话,做一个像这样的: 所以我正在做的是,让演员(人),然后让他们表演的电影,这很有效。然后我试图让那部电影中的联合演员。我想把当前演员的id传递给联合演员字段,作为这样一个论点: 显然,我遇到了一个错误,不知道这是否可以在内部实现。 这是我喜欢的类型:

  • 但是这不起作用,因为上下文是在所有解析器之间共享的,因此如果我在查询上有多个,上下文值就不好。 我还尝试在嵌套解析器上使用上可用的。我可以转到字段,但这里没有参数... 我还尝试在上添加一些数据,但这些数据不在嵌套解析器上共享。

  • 问题内容: 在Python中,是否可以从Bar本身获取包含另一个对象Bar的对象(例如Foo)?这是我的意思的一个例子 这可能吗?谢谢! 问题答案: 传递对Bar对象的引用,如下所示: 编辑: 正如@thomleo指出的那样,这可能导致垃圾回收问题。建议的解决方案位于http://eli.thegreenplace.net/2009/06/12/safely- using-destructors-

  • 我尝试在一个java swing应用程序的缓存实例附近设置两个Oracle Coherence。这里可以找到解决方案。我的案子有点复杂,这就是游戏开始的地方。 在我的情况下,有一个帐户服务。它可以有两个endpoint:SIT和UAT。为了创建两个这样的服务,我需要加载Coherence的两个“实例”,以便用系统变量(tangosol.Coherence.cacheConfig)覆盖endpoin

  • 我有一个窗口,每个类型有不同的项目和不同的视图。我想从内容控件后面的代码访问窗口(父)中的按钮。 OutputConfigView: OutputRenderReview.xaml.cs: 在本例中,parentWindow为空。 如何从控件后面的代码访问调用窗口的按钮?