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

Posted

技术标签:

【中文标题】如何在 Apollo GraphQL Server 中添加字段解析器【英文标题】:How to add field resolver in Apollo GraphQL Server 【发布时间】:2018-10-04 18:20:50 【问题描述】:

如何在 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 的基础,因为我从 mongo 切换到 dynamo,但似乎这个解析器部分应该是独立的。)

【问题讨论】:

【参考方案1】:

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

【讨论】:

这非常有帮助,谢谢!我还有两个问题,我注意到在 LectureType 中你只解决问题而不是 id。如果我想解析 Lecture 上的 id 和其他属性,我是在 LectureType 解析器中还是在 Query 中这样做?另外,我可以为 [LectureType] (即数组)提供单独的解析器吗? 没关系,我想现在明白了。我在查询中进行讲座查找,然后由于返回类型是 LectureType,问题将在 LectureType 解析器中填写。再次感谢!

以上是关于如何在 Apollo GraphQL Server 中添加字段解析器的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在没有 Apollo Server 但使用 express-graphql 的情况下使用 apollo-datasource-rest

如何修复错误:使用 graphql 在 apollo-server 中多次定义类型“Extra”

如何在 graphql apollo-server 变异解析器中发出错误信号?

如何使用 Apollo Server 2.0 GraphQL 将模式指令中的信息作为返回的数据包含在内?

如何在 Firestore Cloud Functions 上使用 Apollo Server GraphQL 在 TypeScript 中处理身份验证