как разделить схему и распознаватели и объединить их apollo-server-express

У меня есть User и Post typeDefs/resolvers, я хочу разделить их, чтобы я мог получить

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
});

person hamodey    schedule 22.09.2018    source источник


Ответы (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
});

EDIT: обратите внимание, что graphql-tools's mergeSchemas теперь является рекомендуемым способом сшивания схемы с сервером apollo.

person Clément Prévost    schedule 22.09.2018
comment
круто, спасибо, у меня есть еще один вопрос: повлияет ли код, если я несколько раз импортирую 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 `; модуль.экспорт = typeDefs; - person hamodey; 23.09.2018
comment
Что вы подразумеваете под схемой записи? - person Clément Prévost; 23.09.2018
comment
речь идет о размере файла, когда я импортирую gql с сервера apollo, который влияет на приложение, доза, которая делает приложение больше (размер), как вы пишете свою схему? вы используете gql api или делаете его строковым? - person hamodey; 23.09.2018
comment
Я склонен всегда использовать литерал шаблона gql из graphql-tag, но сервер apollo принимает как строковые, так и gql схемы. Что касается других вопросов, то они требуют слишком длинных ответов, чтобы поместиться в этот комментарий :s - person Clément Prévost; 23.09.2018

Для слияния типов нет необходимости в дополнительных зависимостях, так как для них подходят graphql-tools. Посмотрите https://github.com/techyaura/graphqlNodeMongodb-server/tree/master/src/gql, если это поможет.

У меня есть два файла todo.types.js и user.type.js в репозитории https://github.com/techyaura/graphqlNodeMongodb-server/tree/master/src/gql/types, и я просто объединяю их, и это работает нормально.

ПРИМЕЧАНИЕ. Я не использую APOLLO GRAPHQL, вместо этого просто использую express-graphql

person techyaura    schedule 11.08.2019