Разбить файл резольвера graphql на отдельные файлы - PullRequest
0 голосов
/ 25 ноября 2018

Я работаю с GraphQL и у меня есть файл resolvers.js , который выглядит следующим образом:

const User = require("../models/User");
const Post = require("../models/Post");

module.exports = {
  Query: {
    async users(){...},
    async user(){...},
    async posts(){...},
    async post(){...},
  },
  User: {...},
  Post: {...},
  Mutation: {
    createUser(){...},
    login(){...},
    createPost(){...},
  },
}

Но если у меня будет больше моделей, запросов и мутаций, файл будетбыть очень длиннымКак я могу разбить это на отдельные файлы?Один для пользовательских запросов и мутаций, один для постов и так далее.Или это невозможно?Может быть, есть способ объединить это с файлом schema.js ?Так что я тоже могу разбить схему и поместить схему / преобразователь из User в файл.Я все еще новичок в кодировании.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Я нашел способ сделать это очень легко на самом деле.В schema.js я могу использовать lodash merge для объединения нескольких файлов распознавателя, а для typedefs я просто использую массив.Таким образом, я могу разбить все на отдельные файлы.

const { merge } = require("lodash");

module.exports = makeExecutableSchema({
  typeDefs: [typeDefs, userTypeDefs],
  resolvers: merge(resolvers, userResolvers)
});
0 голосов
/ 29 ноября 2018

Вот как я это сделал.Обратите внимание, что это в Typescript.

Вы определяете свои средства распознавания в отдельных файлах, например:

import { DateBidListResolvers } from "../../types/generated";

export const DateBidList: DateBidListResolvers.Type = {
  ...DateBidListResolvers.defaultResolvers,

  list: (_, __) => { // This is an example resolver of Type DateBidList
    throw new Error("Resolver not implemented");
  }
};

Затем вы объединяете их в один файл, например так:

import { Resolvers } from "../../types/generated";

import { Query } from "./Query";
import { User } from "./User";
import { DateBid } from "./DateBid";
import { DateItem } from "./DateItem";
import { Match } from "./Match";
import { Mutation } from "./Mutation";
import { Subscription } from "./Subscription";
import { DateBidList } from "./DateBidList";
import { DateList } from "./DateList";
import { Following } from "./Following";
import { MatchList } from "./MatchList";
import { Message } from "./Message";
import { MessageItem } from "./MessageItem";
import { Queue } from "./Queue";

export const resolvers: Resolvers = {
  DateBid,
  DateBidList,
  DateItem,
  DateList,
  Following,
  Match,
  MatchList,
  Message,
  MessageItem,
  Mutation,
  Query,
  Queue,
  Subscription,
  User
};

Затем вы можете импортировать экспорт резольверов в вашу конфигурацию:

import { resolvers } from './resolvers/index';

// ... other imports here

export const server = {
  typeDefs,
  resolvers,
  playground,
  context,
  dataSources,
};

export default new ApolloServer(server);

Надеюсь, это поможет!

...