Javascript 使用继电器时本地化GraphQL结果

Javascript 使用继电器时本地化GraphQL结果,javascript,graphql,relay,graphql-js,Javascript,Graphql,Relay,Graphql Js,我希望GraphQL/Relay社区中有人遇到这个问题 我们有一个多语言系统,这意味着结果是本地化的。因此,我们有一个名为lang的参数,它被传递给字段解析器 查询是这样写的: query { viewer(lang: ja) { books { <- Type is `Book` id title <- This would be localized to Japanese. } } } 这是可能的,因为可翻译字段的解析器如下所示(

我希望
GraphQL/Relay
社区中有人遇到这个问题

我们有一个多语言系统,这意味着结果是本地化的。因此,我们有一个名为
lang
的参数,它被传递给字段解析器

查询是这样写的:

query {
  viewer(lang: ja) {
    books { <- Type is `Book`
      id
      title <- This would be localized to Japanese.
    }
  }
}
这是可能的,因为可翻译字段的解析器如下所示(请注意,我使用的是):

如果存在翻译,它将使用该翻译,而不是原始值。 在我们将
Relay
引入我们的项目之前,这一切都很顺利

我们希望利用继电器的
节点
,并使其部分工作,即:

query {
  node(id: "SOMETHINGSOMETHING123") {
    ...b
  }
}
fragment b on Book {
  id
  name
}
但是由于使用
node
不能接受像
viewer
can这样的参数, 没有办法通过这种语言


如何将
语言参数
传递给同时处理标准查询和节点的解析器?

由于graphql js v0.6,每个解析器都会接收一个
上下文
对象作为第三个参数。这有利于将上下文信息从服务器传递到GraphQL的执行阶段。例如,我们使用它来处理身份验证和授权。你可以在那里用你想要的语言通过考试。如果使用express graphqlkoa graphql,默认情况下,它们将
请求
对象作为
上下文
传递。您可以从解析器中检查头


编辑:下面是一个使用express graphql在graphql解析器中处理会话的示例:

嘿,谢谢你的回答。我们正在使用上下文,当我们通过节点ID查询中继时,它将不起作用。也感谢您的编辑。我将编辑我的答案以反映这一点,但这些查询是代表用户抛出的,这意味着我可能希望结果是日语的,但您可能希望结果是英语的。
...
resolve: (parent, args, ast, { rootValue }) => {
  const { language } = rootValue
  const { BookLoader } = rootValue.loaders
  return BookLoader.TranslationsLoader(language).load(parent.id).then(translations => translations[parent.id].title || parent.title)
}
query {
  node(id: "SOMETHINGSOMETHING123") {
    ...b
  }
}
fragment b on Book {
  id
  name
}