我们的RESTDataSource
已准备好使用,但我们还没有任何 解析器可用于!
A 解析器's 使命是为架构中的 字段填充数据。 您的使命是实现那些 解析器!
到底什么是解析器?解析器是一种函数。它与所需的字段同名。它可以从任何数据源获取数据,然后将该数据转换为客户端所需的形式。
在 server/src/
中,我们将首先创建一个 resolvers.js
文件。
在该文件中,我们将声明一个resolvers
常量,现在为其分配一个空对象。让我们导出它,因为我们将在服务器配置选项中需要它。
const resolvers = {};module.exports = resolvers;
我们的 resolvers
对象的键将对应于我们的架构的类型和字段。
要为 tracksForHome
字段创建一个解析器,我们首先需要向我们的 resolvers
对象添加一个 Query
键。该键的值将是 另一个包含 tracksForHome
键的对象。
在此 tracksForHome
键中,我们将定义对应的 字段的解析器函数。
在此过程中,让我们在解析器上方添加注释,以阐明其作用。
在 resolvers
对象内部
Query: {// returns an array of Tracks that will be used to populate// the homepage grid of our web clienttracksForHome: () => {},}
我们的解析器将如何与我们的数据源进行交互?这是context
发挥作用的地方。解析器函数具有一个带有四个可选参数的特定签名:parent
、args
、context
和info
。
tracksForHome: (parent, args, context, info) => {},
让我们简要介绍每个参数,以了解它们负责什么
- parent
parent
是解析器返回的field的父级。这在处理解析器链时非常有用。 - args
args
是一个包含所有GraphQL 参数的字段的GraphQL 操作,这些参数由查询提供。全部在客户端中查询特定项目(例如某个指定轨道而非所有轨道)时,我们会执行一个带有id
参数的查询,该参数可以通过服务器中的
args
参数访问。我们将在 Lift-off III 中进一步介绍该主题。 - context(上下文)
context
是一个在所有为特定操作执行的解析器中共享的对象。为了共享状态(例如认证信息、数据库连接,或者在本例中为RESTDataSource
),解析器需要此上下文参数。 - info(信息)
info
包含有关操作执行状态的信息,包括字段名、从根目录到该字段的路径,以及更多内容。它不像其他参数那样经常使用,但对于执行更高级的操作(例如在解析器级别设置缓存政策)非常有用。
context
参数有什么作用?使用上面描述的所有四个参数,为字段 spaceCats
编写一个空的解析器函数。该函数不应返回任何内容。使用箭头函数语法。
在本课程中,我们将重点关注 context
,这是作为 参数传递给每个 解析器 函数的第三个位置 参数。我们来深入研究一下。
分享你对这一课的疑问和评论
你的反馈有助于我们改进!如果你遇到困难或疑惑,请告诉我们,我们会帮助你。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或已解决的评论可能会被删除。
你需要一个 GitHub 帐号才能在此处发帖。没有一个吗? 在我们的 Odyssey 论坛上发帖。