【问题标题】:Get localized data from multilingual schema with GraphQL query使用 GraphQL 查询从多语言模式中获取本地化数据
【发布时间】:2019-02-25 23:18:58
【问题描述】:

我有以下 MongoDB 架构。

Item {
  _id: ObjectId,
  translations: [{
    language: String
    name: String
  }]
}

所以我的 Item 实例可能看起来像这样。

{
  _id: ObjectId("5ba3bf09d3121aba3ba2f488"),
  translations: [
  {
    language: "en"
    name: "a Car"
  },
  {
    language: "de",
    name: "der Wagen"
  }]
}

我希望能够以这种方式使用 Graphql 以特定语言查询我的数据。

{
  item(where: {language: "en"}) {
    name
  }
}

所以它会产生像这样的形状很好的输出。

{
  name: "a Car"
}

请告诉我一些好的做法或好方法,我可以设置我的 Graphql 解析器映射?

我正在使用 Apollo 服务器。

非常感谢!

【问题讨论】:

    标签: javascript graphql apollo-server express-graphql


    【解决方案1】:

    针对特定语言查询(具有多个字段)的一般解决方案可能是:

    • 将语言参数传递给查询解析器
    • 将语言存储在解析器上下文中
    • 根据需要使用上下文中的语言

    查询:

    query {
      item(language: "en") {
        name
        otherField
      }
    }
    

    解析器:

    {
      item: (_, { language }, context) => {
        context.language = language;
        return {
          name: (_, context) => getNameByLang(context.language),
          otherField: (_, context) => getOtherByLang(context.language),
        };
      },
    }
    

    或者如果只有一个翻译字段:

    query {
      item {
        name(language: "en")
      }
    }
    

    因此您可以直接在名称解析器中获取语言作为参数。

    {
      item: () => ({
        name: ({ language }) => getNameByLang(language),
      })
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2019-02-06
      • 2018-06-14
      • 2020-01-20
      相关资源
      最近更新 更多