问题标签 [graphql-tools]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1427 浏览

graphql - 使用 makeRemoteExecutableSchema 拼接安全订阅

我们已经实现了模式拼接,其中 GraphQL 服务器从两个远程服务器获取模式并将它们拼接在一起。当我们只使用 Query 和 Mutations 时,一切都运行良好,但现在我们有一个用例,我们甚至需要缝合 Subscriptions,并且远程模式已经在其上实现了身份验证。

我们很难弄清楚如何通过网关将连接参数中收到的授权令牌从客户端传递到远程服务器。

这就是我们自省模式的方式:

API网关代码:

有什么方法可以实现这一点graphql-tools吗?任何帮助表示赞赏。

0 投票
1 回答
2241 浏览

graphql - Graphql:完全改变模式中的字段类型

我需要完全改变字段类型。

情况:我有一个结合了多种服务的网关。Query: { ServiceName: { serviceQuery } }它通过内省获取它们的模式,通过向类型添加名称空间(使用 apollo graphql-tools)来转换它们,并通过构建具有ServiceNameQuery类型和设置delegate解析器的新模式将它们放入嵌套查询(例如)中。之后,我需要创建跨服务链接。

我有ServiceA一个带有属性的类型related,其中包含来自TargetTypefrom 的ID ServiceB。我需要将属性类型relatedIDto更改为TargetType并添加一个解析器,它将从ServiceB.

这是一个真实的例子: 在此处输入图像描述

为此,我在合并模式上运行visitSchema(从转换),找到我需要的字段,从模式中获取并更改字段类型并设置如下解析器:graphql-toolsTargetType

当我在将结果模式传递给 graphql 服务器之前运行 console.log 类型时 - 我看到它的类型和 astNode 确实发生了变化并且它们是正确的。

当我运行自省时——我发现这种类型的字段是正确的。

但是当我运行一个查询时,我query { ServiceA { serviceQuery { id related { id } } } }在请求解析阶段遇到错误:

它事件不会尝试调用serviceQuery解析器。

当我更改类型定义时,它从哪里获取该字段的 ID 类型?我还需要在哪里更改它的类型?

UPD 即使我创建这样的新类型:

我不断收到此错误,并且未触发解析器。如果我以同样的方式添加一个具有不同名称的新字段 - 就可以了。但如果名称相同 - 错误

0 投票
1 回答
339 浏览

graphql - Graphql 拉取数据进行分页

我有以下架构

并在查询

在我定义的解析器中Query -> useruser -> posts 当我提取我使用的数据时:

它工作得很好。现在我的问题是如何在无限滚动的情况下有效地拉第二页(最后加载更多按钮)。我可以使用:

但是再次吸引用户似乎没有必要,我只需要发布更多内容。是否有内置方式 graphql 处理这个?还是我必须定义一个单独的posts(page: Int!, username: String!)查询

0 投票
0 回答
242 浏览

node.js - 如何在 GraphQL 中记录成功请求?

我正在使用makeExecutableSchemafromgraphql-tools并且正在使用logger参数来记录错误。但是,在成功请求中永远不会调用记录器。
有没有办法记录成功请求?

0 投票
2 回答
1196 浏览

javascript - 错误:只能有一个名为“fragmentName”的片段

我正在改变我的模式的格式:

对此:

由于我有很多字段,并且我想将它们从旧格式一个一个转移到新格式,我正在使用来自graphql-tools的函数mergeSchemas :

当我尝试创建一个查询(仅从 OldSchema 获取字段)时,我收到错误**只有一个名为“duty”的片段。

这是我的查询的样子:

我知道解析中发生了错误,并且似乎正在为 OldSchema 和 RootSchema 进行查询验证,但 RootSchema 是失败的。

0 投票
1 回答
598 浏览

node.js - GraphQL - 如果父返回类型是对象列表,则模式拼接上的模式委派不起作用

我有一个包含 imageId 的 Publication 对象,我想用它来创建模式委托并加载整个对象。

出版物类型定义为:

媒体类型定义为:

其中 MetadataType 是代码中定义的另一种类型。

2 个对象通过这些查询公开:

现在我正在尝试将所有定义的模式合并到一个模式中并添加一个委托来加载类型 Media 而不是 ImageID 以便下一个类代表我将公开的主要模式:

主模式将使用 graphqlExpress 服务器公开给最终用户但是,我可以在模式定义中看到扩展类型。

发布类型架构描述

但是当我尝试使用定义为的查询查询媒体类型的字段图像时

查询将直接命中 getGroupPublications 出版物,而不考虑 mergeSchema,我收到此错误:

但是,如果我在没有字段图像的情况下运行查询,它可以正常工作

0 投票
1 回答
98 浏览

javascript - 在不同的突变中使用相同对象的输入类型

我有一个输入类型,我想在多个突变中使用。从一种突变到另一种突变的使用之间的唯一区别是其字段的强制属性。

例如,假设我在创建突变中使用了以下输入类型:

和字段都是必填项namedescription

如果我想在另一个description可选的突变中使用相同的输入类型怎么办?我真的必须创建另一种输入类型来消除字段的强制属性吗?

0 投票
1 回答
585 浏览

node.js - 模式拼接两个远程 Prisma/GraphQL 模式

我正在尝试创建一个基于微服务的应用程序,该应用程序使用在 Docker 中运行的两个远程 Prisma/GraphQL 模式和一个使用模式拼接自省它们的网关。

Prisma/GraphQL 模式:

现在在网关服务器中,我能够成功地使用 graphql-tools 进行自省和合并模式,并且我添加了扩展类型以允许两种类型之间的关系

我按照 Apollo GraphQL 文档使用远程模式进行模式拼接,这是我现在合并的模式的解析器

我遇到的问题是每次我为他们的新扩展字段查询用户或个人资料时,它总是返回 null。我已经确保我已经创建了具有现有 profileId 的 User 对象,同样具有现有 userId 的 Profile 对象。这是查询结果的示例

在此处输入图像描述

我已经浏览了大约一周的文档,但似乎没有任何效果。据我了解,一切都已正确插入。希望有人可以提供帮助。我感觉它与碎片有关。如果需要,我可以提供用户和配置文件对象的屏幕截图以进行更多说明。谢谢。

0 投票
1 回答
90 浏览

graphql - 从 apollo 2 迁移 - mergeSchemas 不包括 GraphQLSchema

我正在使用 Apollo 1 服务器,并且正在尝试迁移到 Apollo 2。我的项目包括 2 个简单的 GraphQLSchema:

虽然这种缝合在阿波罗 1 号上有效——

它在阿波罗 2 号中引发错误 -

  ....类型“GraphQLSchema”不可分配给类型“GraphQLNamedType[]”。“GraphQLSchema”类型中缺少属性“includes”。

帮助将不胜感激!

0 投票
2 回答
475 浏览

javascript - 如何解决 GraphQL 中的命名冲突?

上面的示例运行良好,但我想使用突变名称increase_length而不是increase_fish_lengthincrease_rope_length

我尝试使用斜线命名突变Fish/increase_lengthRope/increase_length,但它不起作用。(仅 /[_A-Za-z][_0-9A-Za-z]*/ 可用。)

Dose GraphQl 支持命名空间的任何解决方案吗?