将 GraphQL 模式拆分为 express-graphql 中不同模块的最佳方法?

Posted

技术标签:

【中文标题】将 GraphQL 模式拆分为 express-graphql 中不同模块的最佳方法?【英文标题】:Best way for splitting GraphQL schema into different modules in express-graphql? 【发布时间】:2020-07-30 14:49:04 【问题描述】:

我是 QraphQL 的新手,我在 apollo-server 中找到了一些模块系统的最佳实践,但我找不到 express-graphql 的任何内容!

我使用的是GraphQLSchema 而不是buildSchema。当我试图将我的代码拆分成不同的模块时,它会陷入 NodeJs 循环依赖错误(返回空对象)。

作为 GraphQL 专家,您推荐哪一位? apollo-server 还是 express-graphql?如果你推荐express-graphql,你推荐哪种方法? GraphQLSchemabuildSchema?

以及为每一种方法拆分我的架构的最佳方法是什么?

【问题讨论】:

使用GraphQLSchema 应该没问题。重要的是,如果您在类型系统中进行递归,则将递归类型放在一个 thunk(不带参数的函数)中,就像两边的 type: () => RecursiveType 一样。现在这种类型可以在定义期间未定义。 如果你不使用 ES 模块但 require 它可能会更棘手。在这里,您必须引用整个模块并避免提前解构:const rec = require('RecursiveType')type: () => rec.RecursiveType @Herku 但问题就在这里!我得到了空对象,但我没有使用递归类型,我正在使用 thunk!但我仍然在 graphiql 中遇到空对象错误 那么,这似乎是一个与GraphQL无关的问题,与Node.js的模块解析算法有关。如果没有你准确地分享你如何导入文件和你的文件结构,我想我不能帮助你:( 【参考方案1】:

使用 apollo-server-express,帮助我完成了很多类似这样的事情。

【讨论】:

以上是关于将 GraphQL 模式拆分为 express-graphql 中不同模块的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

将 graphql 解析器文件拆分为单独的文件

有啥方法可以将 GraphQL 查询的多个 Fragment 扩展拆分为多个调用?

是否可以将 GraphQL 查询拆分为单独的反应查询缓存

Apollo GraphQL - 将 .graphql 模式导入为 typeDefs

如何将 HotChocolate 中的模式打印为 GraphQL SDL

来自 GraphQLObjectType 模式的 graphql mergeSchemas