如何在 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 中处理身份验证