将 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
,你推荐哪种方法? GraphQLSchema
或 buildSchema
?
以及为每一种方法拆分我的架构的最佳方法是什么?
【问题讨论】:
使用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 查询的多个 Fragment 扩展拆分为多个调用?
Apollo GraphQL - 将 .graphql 模式导入为 typeDefs