问题标签 [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 投票
1 回答
227 浏览

graphql - 在加载之前从模式中删除自定义指令

我正在使用graphql-codegen插件typescript-mongodb从 qraphql 模式生成数据库模型文件。因此,我的架构包含来自typescript-mongodblike@entity@column. codegen 工作正常,但是当我使用该graphql-tools loadSchemaSync函数加载架构时,我得到一个架构验证错误,它抱怨未知指令。

可能最简单的解决方案是将 mongo 插件指令定义添加到模式中(我也无法开始工作)。但是在 graphql-codegen 生成配置文件之后,实际上没有任何理由在模式中包含这些指令。

所以我想知道在将模式文件加载到可执行模式之前,是否有一些标准方法可以从模式中删除与 mongo 相关的指令作为中间步骤?

或者有没有办法告诉 loadSchemaSync 函数忽略“未知指令”错误?

这是我当前加载架构文件的代码:

0 投票
0 回答
173 浏览

graphql - 在 GraphQL 中从模式拼接迁移到联合时如何解决字段冲突?

我正在尝试迁移依赖模式拼接的现有 GraphQL 代码以改用联合。

我正在努力弄清楚如何优雅地处理与重复扩展/类型定义相关的错误。

我正在尝试遵循此存储库中的示例:https ://github.com/apollographql/federation-migration-example 。

before-migration文件夹中,项目定义了这样的模式:

这个例子和我现在的配置类似。

after-migration文件夹中,他们有这个:

有什么方法可以优雅地(没有停机时间)从一种模式迁移到另一种模式?当我尝试按照这样的示例进行操作时,我从拼接服务中得到一个错误,说"Field "Reservation.user" already exists in the schema. It cannot also be defined in this type extension."这是有道理的,因为我还没有extend type Reservation从拼接服务中删除初始值。

问题是,基于这个例子,我相信从一种模式迁移到另一种模式时必须有一些停机时间。如果首先删除初始拼接类型扩展名,这将在现有客户端尝试查询Reservation.user. 如果在添加联合式扩展之前未删除初始扩展,则会引发冲突错误。

文档https://www.apollographql.com/docs/federation/migrating-from-stitching/表明可以遵循特定步骤从拼接迁移到联合:

  1. 为您的子图添加联合支持
  2. 向注册表注册您的 GraphQL 模式
  3. 启动 Apollo Server 实例作为网关
  4. 将拼接逻辑从模式拼接网关迁移到子图
  5. 将流量从模式拼接网关转移到 Apollo Server 网关
  6. 从联合模式中删除模式拼接字段并完成迁移

我不明白如何以优雅的方式执行这些步骤。似乎第 4 步“将拼接逻辑从你的模式拼接网关迁移到你的子图”将不可避免地导致我上面提到的那种冲突。文档的编写方式似乎暗示两种方法可以同时共存(文档甚至建议拼接和联合服务器都可以托管在同一进程中)。

我考虑使用transformSchemaonTypeConflict https://www.apollographql.com/docs/apollo-server/api/graphql-tools/#transformschema但我很难理解这些可能如何适用于我的情况。文件说

的默认行为mergeSchemas是采用所有同名类型中第一个遇到的类型。

我相信这与我需要的不同,因为这指的是类型而不是“根字段”。我想知道是否可以仅在该字段不存在的FilterRootFields情况下以某种方式有条件地应用拼接类型扩展。我不确定这到底是如何工作的,我找不到基于模式数据本身有条件地过滤根字段的示例。

有没有解决这个问题的规范方法?

0 投票
1 回答
97 浏览

typescript - 在 .graphql 文件中定义 GraphQL 对象类型不起作用

我正在尝试在 type-graphql 中进行突变,其中一个参数是 Object 所以:

所以我为参数“图像”创建了一个输入类型:

和一个对象类型:

现在我正在尝试使用 GraphQL 代码生成器,我需要在客户端编写查询和突变作为 .graphql 文件扩展名,所以我有:

现在,当我尝试运行“npm run gen”时说:

GraphQLDocumentError:未知类型“ImagesArray”。

我试图在上面添加:

不再工作了,有什么想法吗?

0 投票
0 回答
41 浏览

express - 用于检查两个或多个字段的值的自定义指令

我尽力在 Apollo Server Express 中编写一个自定义指令来验证两个输入类型字段。但是代码甚至可以工作,但是已经发生了突变的记录。如果有人可以帮助我修复以下代码中的任何错误,我将不胜感激。这只是示例代码,我需要同时测试两个字段中的值。

0 投票
1 回答
82 浏览

graphql-js - 自定义针对 graphql-tools 中的类型定义的模拟数据

我正在使用 graphql-tools 模拟我的 UI(create-react-app)功能测试。我对 MockList 有疑问

目前,我正在按类型进行模拟,其中一个属性是数组,但我仍然需要能够自定义列表中的元素

例如,我有一个LineItem类型,它的模拟定义为

并且购物车类型有一个列表LineItem

有没有办法让购物车中的 2 件商品的商品名称不同?

我试图像这样映射数组

但是name模拟结果没有改变。它仍然设置为Item name。仅id更改为123. 我在这里错过了什么吗?

0 投票
0 回答
20 浏览

webpack - 将文件“.gql”与 webpack 一起使用时出现什么样的 graphql 错误?

我尝试将 typeDefs 分离到文件中users.typeDefs.ts

用户解析器:

index.js 用于makeExecutableSchema

这是我的服务器代码:

webpack 配置在这里:

当我开始项目时遇到此错误,我尝试搜索但未找到解决方案。任何人都可以帮忙吗?

0 投票
1 回答
42 浏览

graphql - 通过批处理相同的类型从远程服务器加入模式

我是阿波罗服务器的新手,我正在努力理解如何将远程模式变成一个庞大的方案,我能够加入模式并且现在可以查询数据,但是,我似乎无法链接/解决类型,我的两个微服务对那些在任何地方都相同的类型使用相同的类型名称,pk并且在所有这些类型中都很常见,只有一个只有一个pk,另一个有一些额外的字段,我的商店模式看起来像这样

真正重要的是pk在这种情况下,因为它假设加入我的身份验证模式,看起来像这样

有这么多其他字段,我希望能够在 appolo 服务器中加入这两个字段的数据字段,因为这是我合并我的两个模式的地方,这样当我查询时

然后即使usernameandemail不在第一个模式中,它也可以通过pk身份验证模式解析这些字段

我用过这样的东西

加入我的模式,那么我什至如何让两者按照我的意愿一起工作?提前非常感谢

0 投票
0 回答
44 浏览

graphql - 如何使用 graphql-tools 对 GraphQL 模式指令做出反应

我在 y GraphQL 模式中有以下指令来检查参数是否是真正的 slug

在使用SchemaDirectiveVisitorfrom之前apollo-server-express,我们有一个可行的解决方案,据我了解,这只是从 graphql-tools 重新导出。由于最新的主要版本已将其删除,因此我们必须对其进行重构。据我了解,graphql-tools API 也发生了变化,因此要对指令做出反应,我们必须遵循此处的示例。

所以这就是我到目前为止所拥有的,但它根本没有进入fieldConfig.resolve函数:

0 投票
1 回答
1616 浏览

typescript - 无法从 graphql-tools 导入 IResolvers

import { IResolvers } from "graphql-tools"; 我试图从 graphql-tools 导入 IResolvers 并收到消息 Module: '"../node_modules/graphql-tools"' has no export member 'IResolvers'

我的依赖是:“apollo-server-express”:“^3.1.2”,“graphql”:“^15.5.1”,“graphql-tools”:“^8.1.0”

这是因为我在阿波罗 3 号上,而不是有 IResolver 的阿波罗 2 号上吗?

0 投票
0 回答
25 浏览

graphql - Graphql 联合与模式拼接。何时选择一个而不是另一个

我对这两个概念都很陌生,所以如果它是基于意见的,请原谅。目前,我正在研究 graphql-tools 包提供的 Apollo Federation 和模式拼接,尽管我猜它适用于类似的包。是否可以创建一个表格之类的东西来描述某些要求/条件以使其优先于另一个?