如果获得超过 1 个模式,Graphql 工具 mergeSchemas 会抛出错误

Posted

技术标签:

【中文标题】如果获得超过 1 个模式,Graphql 工具 mergeSchemas 会抛出错误【英文标题】:Graphql tool mergeSchemas throwing error if It gets more than 1 schema 【发布时间】:2020-09-11 03:42:32 【问题描述】:

我正在尝试使用 graphql 工具来执行模式拼接。但是,如果我传递多个模式,则会引发 2 个错误。

有时它会抛出

 Object.keys(source).forEach(key => 
                                        ^
RangeError: Maximum call stack size exceeded

或者

\'use strict';
^

RangeError: Maximum call stack size exceeded

我的架构设置非常简单。我只有 2 个模式国家和城市。它们也有 UUID、JSON 标量类型。

import 
  makeExecutableSchema,
  mergeSchemas,
 from 'graphql-tools'
import GraphQLUUID from 'graphql-type-uuid'
import GraphQLJSON from 'graphql-type-json'

const countrySchema = makeExecutableSchema(
  typeDefs:`
    scalar UUID
    type Country 
      id: UUID!
      name: String
    
    type Query 
      country: Country
    
  `,
  resolvers: 
    UUID: GraphQLUUID,
  
)


const citySchema = makeExecutableSchema(
  typeDefs:`
    scalar UUID
    scalar JSON
    type City 
      id: UUID!
      name: String
      coordinates: JSON
    
    type Query 
      city: City
    
  `,
  resolvers: 
    UUID: GraphQLUUID,
    JSON: GraphQLJSON,
  
)


const resolvers = 
  Query: 
    country: () => ( id: '2ij29fij390f3j', name: 'Toronto'),
    city: () => (id: '2ij29fij390f3j11', name: 'Toronto', coordinates: "[]")
  


export const schema = mergeSchemas(
  schemas: [ countrySchema, citySchema],
  resolvers: resolvers

);

有趣的是,如果我将 countrySchema 或 citySchema 传递给 schemas 数组。有用。 但是它们都抛出了我上面提到的错误。

请分享你的想法。

【问题讨论】:

【参考方案1】:

这似乎是 graphql-tools 的 6.0.0 版引入的回归。通过运行npm install graphql-tools@5.0.0 将您的版本降低到 5.0.0。如果一个 issue 还没有被打开,你可以在 Github 上打开一个来解决这个 bug。

【讨论】:

我继续开了一个新问题here。 你是对的。我不得不挖了几个小时的其他东西,结果是graphql版本问题..然后那个错误也出现了。 graphql-tools 的版本问题。谢谢! @KimRoy 这个问题现在已经修复,应该从 v6.0.1 开始工作

以上是关于如果获得超过 1 个模式,Graphql 工具 mergeSchemas 会抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

18.10.29 多模式串字符串匹配模板题~AC自动机

DP4 1014

使用最新版本的 Apollo 和 GraphQL 工具进行远程模式拼接

在“搜索”连接上请求 500 条记录超过了 graphql 中 100 条记录的“第一”限制

你可以在graphql服务器模式文件中使用片段吗

多模式串字符串匹配模板题