如果获得超过 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 会抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
使用最新版本的 Apollo 和 GraphQL 工具进行远程模式拼接