当前位置:  开发笔记 > 编程语言 > 正文

如何在Apollo GraphQL Server中添加字段解析器

如何解决《如何在ApolloGraphQLServer中添加字段解析器》经验,为你挑选了1个好方法。

如何在graphQL阿波罗语法中添加字段解析器?使用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的基础,因为我从mongo切换到dynamo,但看来此解析器部分应该是独立的。)



1> Daniel Reard..:

如果以编程方式定义的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
}

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有