Как добавить распознаватель полей в Apollo GraphQL Server - PullRequest
0 голосов
/ 24 апреля 2018

Как добавить преобразователи полей в синтаксисе graphQL apollo?Используя синтаксис graphql, если у меня была лекция с вопросами, я могу сделать это:

const LectureType = new GraphQLObjectType({
  name: 'LectureType',
  fields: () => ({
    id: { type: GraphQLID },
    questions: {
      type: new GraphQLList(QuestionType),
      resolve: ({ _id }, args, { models }) => models.Lecture.findQuestions(_id),
    },
  }),
});

Каков эквивалентный синтаксис с использованием apollo graphQL?Я думаю, что я могу сделать это определение типа с этим решателем:

  type QuestionType {
    id: String,
  }

  type LectureType {
    id: String,
    questions: [QuestionType],
  }

const getOne = async ({ args, context }) => {
  const { lecture, question } = constructIds(args.id);
  const oneLecture = await model.get({ type: process.env.lecture, id: lecture });
  oneLecture.questions = await model
  .query('type')
  .eq(process.env.question)
  .where('id')
  .beginsWith(lecture)
  .exec();
  return oneLecture;
};

Проблема в том, что я заполняю вопросы вручную для каждого средства разрешения, а не на уровне схемы.Это означает, что мои запросы будут заполняться только той фиксированной глубиной, которую я указываю, а не на основе фактически запрашиваемых параметров возврата запроса.(Я знаю, что здесь нет основы 1: 1, так как я переключаюсь с монго на динамо, но кажется, что эта часть решателя должна быть независимой.)

1 Ответ

0 голосов
/ 24 апреля 2018

Если программно определенные функции resolve работают должным образом, вы можете использовать их "как есть" внутри объекта резольвера:

const typeDefs = `
type QuestionType {
  id: String,
}

type LectureType {
  id: String,
  questions: [QuestionType],
}
# And the rest of your schema...`

const resolvers = {
  LectureType: {
    questions: ({ _id }, args, { models }) => { 
      return models.Lecture.findQuestions(_id)
    }
  },
  Query: {
    // your queries...
  }
  // Mutations or other types you need field resolvers for
}
...