5. 解析器的形状
3m
您当前使用的是本课程的较旧版本。 查看课程变更日志.

我们的RESTDataSource已准备好使用,但我们还没有任何 可用于!

A 's 使命是为架构中的 填充数据。 您的使命是实现那些

到底什么是?解析器是一种函数。它与所需的同名。它可以从任何获取数据,然后将该数据转换为客户端所需的形式。

Hand-drawn illustration depicting a resolver function retrieving data from data-land

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 client
tracksForHome: () => {},
}
关于解析器,以下哪些说法是正确的?

我们的将如何与我们的进行交互?这是context发挥作用的地方。函数具有一个带有四个可选参数的特定签名:parentargscontextinfo

Hand-drawn illustration depicting a resolver function signature with its four parameters
tracksForHome: (parent, args, context, info) => {},

让我们简要介绍每个参数,以了解它们负责什么

  • parent
    parent返回的的父级。这在处理解析器链时非常有用。
  • args
    args是一个包含所有 ,这些参数由提供。全部在客户端中查询特定项目(例如某个指定轨道而非所有轨道)时,我们会执行一个带有id 查询,该参数可以通过服务器中的args参数访问。我们将在 Lift-off III 中进一步介绍该主题。
  • context(上下文)
    context是一个在所有为特定执行的中共享的对象。为了共享状态(例如认证信息、数据库连接,或者在本例中为RESTDataSource),解析器需要此参数。
  • info(信息)
    info包含有关执行状态的信息,包括名、从根目录到该的路径,以及更多内容。它不像其他参数那样经常使用,但对于执行更高级的操作(例如在级别设置缓存政策)非常有用。
context参数有什么作用?
编码挑战!

使用上面描述的所有四个参数,为字段 spaceCats 编写一个空的解析器函数。该函数不应返回任何内容。使用箭头函数语法。

在本课程中,我们将重点关注 context,这是作为 传递给每个 函数的第三个位置 参数。我们来深入研究一下。

上一个

分享你对这一课的疑问和评论

你的反馈有助于我们改进!如果你遇到困难或疑惑,请告诉我们,我们会帮助你。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或已解决的评论可能会被删除。

你需要一个 GitHub 帐号才能在此处发帖。没有一个吗? 在我们的 Odyssey 论坛上发帖。