resolve函数的context和rootValue参数的预期用例是什么?

时间:2016-04-25 23:06:02

标签: graphql

graphql-js的0.5.0版本包含对resolve函数的重大更改 - 它现在会收到一个额外的context参数。

在我看来,context旨在传输用户会话数据。现在rootValue参数的用例是什么?

1 个答案:

答案 0 :(得分:2)

RootValue是顶级解析器的第一个参数,它在该函数中仍然有用。

根查询/突变类型在技术上也可以是架构中另一个字段的解析类型。如果只能在通过非root类型访问该解析函数时为该解析函数提供输入值,那将是很尴尬的。这是一个例子:

type Mutation {
  someMutationField: Query
}

type Query {
  someField: String
}

schema {
  query: Query
  mutation: Mutation
}

保留rootValue的另一个原因:它可以用于将两个GraphQL子模式合并到一个更大的模式中,其中子模式驻留在不同的服务器上。为了能够做到这一点,您需要有一种方法将根值与查询一起传递给顶级解析函数。用于express-graphql的当前HTTP传输不允许您这样做,但可以轻松添加。

即使我以前没有看到有人以这种方式使用rootValue,但我认为很可能迟早有人会以这种方式使用rootValue,或者找到其他用途,这可能是为什么它没有从GraphQL-JS中删除。