首页 > 解决方案 > 如何使用相同的参数查询 Graphql 2 对象

问题描述

我正在实现 GraphQL 以使用 Web 驱动程序从 Web 查询数据。

我的问题是我无法弄清楚如何使用一个参数作为 2 个不同查询的输入。所以基本上它是从 2 个不同的站点查询数据并且具有相同的输入,通常是 4 个字符的符号。

我希望我的查询看起来像什么。

{
   Webpage1(symbol:"AABC"){
       data_from_site,
       some_other_data
       Webpage2(symbol:"AABC"){ ##get rid of this Double attribute entry
          data_from_page2
       }  
   }
}

我怎样才能只传递一个参数并从两个站点获取数据?因此它将在解析器使用的根上下文中。

我对 GraphQL 相当陌生,并尝试定义单独的 GraphQLObjectType 来解决这个问题。但我真正要寻找的是同一对象中的统一数据和从父对象解析的参数。

var schema = new GraphQLSchema({
    query: new GraphQLObjectType({
        name: 'Query',
        fields: {
            Webpage1: {
                type: Website1,
                args: {
                    symbol: { type: GraphQLString },
                    //date: { type: GraphQLString }

                },
                resolve: function (_, { symbol }) {
                    return {
                        symbol
                    };
                }
            },
            Webpage2: {
                type: History,
                resolve: function (_, { symbol }) {
                    return {
                        symbol
                    };
                }
            }
        }
    })
})

标签: javascriptecmascript-6graphqlapollo

解决方案


如果我正确理解您的问题,您可以保持架构不变,并在发送查询时使用变量:

query MyQuery($mySymbol: String){
  Webpage1(symbol:$mySymbol) {
    data_from_site
    some_other_data
  }
  Webpage2(symbol:$mySymbol) {
    data_from_page2  
  }
}

变量定义在文档的顶部,作为操作定义的一部分。一旦定义,它们可以在文档中使用相同类型的文字值的任何地方使用任意次数。您可以在此处查看有关变量的官方教程和此处的规范。


推荐阅读