如何分离模式和解析器并将它们合并 apollo-server-express

Posted

技术标签:

【中文标题】如何分离模式和解析器并将它们合并 apollo-server-express【英文标题】:how to seperate schema and resolvers and merage them apollo-server-express 【发布时间】:2019-02-26 16:01:07 【问题描述】:

我有 User 和 Post typeDefs/resolvers 我想将它们分开以便我可以得到 ​​p>

User.schema.js 
User.resolver.js

Post.schema.js 
Post.resolver.js

link.Schema.js
link.resolvers.js

如何做到这一点并将它们合并以仅获得一个 typeDefs/resolvers 以将其传递给

const server = new ApolloServer(
  typeDefs,
  resolvers
);

【问题讨论】:

【参考方案1】:

合并类型不需要更多的依赖,因为 graphql-tools 对它们来说很好。 看看https://github.com/techyaura/graphqlNodeMongodb-server/tree/master/src/gql,如果有帮助的话。

我在 repo https://github.com/techyaura/graphqlNodeMongodb-server/tree/master/src/gql/types 中有两个文件 todo.types.jsuser.type.js,我只是将它们连接起来,效果很好。

注意:我没有使用 APOLLO GRAPHQL,而是简单地使用 express-graphql

【讨论】:

【参考方案2】:

我一直在使用 merge-graphql-schemas 包进行类型定义,并为解析器使用 lodash 深度对象合并功能,如下所示:

import merge from "lodash/merge"
import  mergeTypes  from "merge-graphql-schemas"
import UserSchema from "./User.schema"
import UserResolvers from "./User.resolvers"
import PostSchema from "./Post.schema"
import PostResolvers from "./Post.resolvers"
import LinkSchema from "./Link.schema"
import LinkResolvers from "./Link.resolvers"

const typeDefs = mergeTypes([UserSchema, PostSchema, LinkSchema])
const resolvers = merge(UserResolvers, PostResolvers, LinkResolvers)

const server = new ApolloServer(
  typeDefs,
  resolvers
);

编辑:请注意,graphql-tools's mergeSchemas 现在是与 apollo 服务器进行模式拼接的推荐方式。

【讨论】:

很酷,谢谢,我还有一个问题:如果我多次导入 gql 来编写架构,是否会影响代码?还是您使用另一种方式编写模式 const gql = require('apollo-server-express'); const typeDefs = gql` type Query Users: [User] getUserById(id: ID): User type User id: ID name: String Post: [Post] type Mutation `; module.exports = typeDefs; “写模式”是什么意思? 当我从 apollo-server 导入 gql 时文件的大小会影响应用程序,使应用程序变大(大小) 你如何编写架构?你使用 gql api 还是将其设为字符串? 我倾向于总是使用来自graphql-taggql 模板文字,但apollo 服务器确实接受字符串和gql 模式。至于其他问题,他们需要的答案太长,不适合此评论:s

以上是关于如何分离模式和解析器并将它们合并 apollo-server-express的主要内容,如果未能解决你的问题,请参考以下文章

Java 和 YAML:如何解析多个 yaml 文档并将它们合并为单个 YAML 表示?

我们如何从 apollo-server 模块传递 ApolloServer 中的数据源和合并的 graphql 模式和解析器?

如何合并物理文件(pdf)和生成的文件(pdf)并将它们输出到浏览器?

我如何分离每个 JSON 对象并将它们分组到 JavaScript 中的数组?

识别模式并将它们作为新列

如何使用多个选择器重用相同的样式规则