当前位置: 首页 > 知识库问答 >
问题:

GraphQL循环遍历数组并获得所有结果

堵睿范
2023-03-14

我是GraphQL的新手。我正在使用亚马逊和Itunes的API获取一本书的标题(和其他信息)。我返回的对象如下:

var data = [];
data.title = results[0].title;
data.author = results[0].author;
return data;

我可以调用Amazon和ITunes API并返回一本书的可用数据。但是,我希望能够插入EAN/ISBN数组,并从Amazon和ITunes返回所有书籍的数据。

因此,查询应该是这样的:

{
  book(id:["9789025451608", "8974832789431","9789024576791"]){
    amazon{
      title
    },
    itunes{
      title
    }
  }
}

而回应:

{
  "data": {
    "book": {
      "book1":{
           "amazon": {
                "title": "De Moord op Commendatore"
            },
           "itunes": {
                "title": "Niet beschikbaar" // not available
           }
       },
       "book2":{
           "amazon": {
                "title": "Origin"
            },
           "itunes": {
                "title": "Origin" 
           }
       }
    }
  }
}

我已经搜索了使用graphQLList的例子,但我不确定在哪里使用graphQLList以及如何遍历BookTypes。

也许有人能帮我或者给我举个例子。

我的查询如下所示

{
  book(id:["9789025451608"]){
    amazon{
      title
    },
    itunes{
      title
    }
  }
}

并返回:

{
  "data": {
    "book": {
      "amazon": {
        "title": "De Moord op Commendatore"
      },
      "itunes": {
        "title": "Niet beschikbaar" // not available
      }
    }
  }
}

Schema.js

"use strict";
const graphql = require('graphql');
const axios = require('axios');
const {
  GraphQLObjectType,
  GraphQLString,
  GraphQLInt,
  GraphQLSchema,
  GraphQLList
} = graphql;

// root queries
const RootQuery = require('./types/query');

module.exports = new GraphQLSchema({
  query: RootQuery
});

根查询:

const graphql = require('graphql');
const axios = require('axios');

const {
  GraphQLObjectType,
  GraphQLString,
  GraphQLList,
  GraphQLInt
} = graphql;

const BookType = require('../types/book');

const RootQuery = new GraphQLObjectType({
  name:'RootQuery',
  fields: () => ( {
    book: {
      type: BookType,
      args:{ id : { type: GraphQLString } },
      resolve (parentValue, args) {
       return resp = { id: args.id }
     }
    }
  })
});

module.exports = RootQuery;

书本类型

const graphql = require('graphql');
const axios = require('axios');
const {
  GraphQLObjectType,
  GraphQLString,
  GraphQLInt
} = graphql;

// Itunes
const itunes = require('../connections/itunes');
const ItunesType = require('./itunes');

// Amazon
const amazon = require('../connections/amazon');
const AmazonType = require('./amazon');


const BookType = new GraphQLObjectType({
  name:'book',
  fields: () => ( {
    id: {
      type: GraphQLString,
    },
    itunes: {
      type: ItunesType,
      resolve(parentValue,args){
        console.log(parentValue);
        data = itunes.getMetadataItunes(parentValue.id);
        return data;
      }
    },
    amazon: {
      type: AmazonType,
      resolve(parentValue, args) {
        console.log(parentValue);
        data = amazon.getMetadataAmazon(parentValue.id);
        return data;
      }
    }
  })
});

module.exports = BookType;

亚马逊类型

const graphql = require('graphql');

const{
  GraphQLObjectType,
  GraphQLString,
  GraphQLList
} = graphql;


const AmazonType = new GraphQLObjectType({
    name: 'amazon',
    fields: () => ( {
        title: { type: GraphQLString },
    })
});

module.exports = AmazonType;

ITunesType也有同样的代码。

共有1个答案

韩刚洁
2023-03-14

如果要返回多本书,则书籍字段的类型需要为 GraphQL 列表。

fields: () => ( {
    book: {
      type: new GrapQLList(BookType),
      args:{ id : { type: GraphQLString } },
      resolve (parentValue, args) {
       return resp = { id: args.id }
     }
    }
 类似资料:
  • 问题内容: 我正在尝试遍历以下内容 我到目前为止所得到的: 有任何想法吗? 问题答案: 在您的代码中,元素是JSON对象的数组,而不是JSON对象本身。元件,和是JSON的一部分内部对象JSON阵列。 您需要遍历数组 版画 我不知道您的代码片段来自何处。

  • 问题内容: 我可能错过了一些简单的事情,但似乎在这里被阻止了……我有一个带有两个表的MySQL数据库,每个表都有几行。因此,目标是查询数据库并在表中显示结果,因此我开始是这样的: 然后我有这个PHP代码: 然后,我用它来获取数组: 在这一点上,我认为我可以简单地遍历数组并将结果显示在表中。我已经有一个函数可以执行表的循环和显示,但是不幸的是,数组在到达函数之前似乎还不完整。 要对此进行故障排除,请

  • 问题内容: 我有一个具有1 2 3 4 5值的数组。 现在我想以循环方式遍历它。像我想打印2 3 4 5 1或3 4 5 1 2或5 1 2 3 4等等。有什么 算法 吗? 编辑: 我想以循环方式打印所有组合。我不想在初始阶段说明起点。 问题答案: (如果要从向下迭代数组,请在数组下标表达式中更改为。) 我应该注意,就执行速度而言,这可能不是表达循环的最有效方法。但是,差异很小,并且 很可能无关紧

  • 问题内容: 我需要遍历一个post数组并对其求和。 但是我不知道从哪里开始。 问题答案: 这是您的操作方式: 这会照顾传入的变量和数组。

  • 问题内容: 我有一个Java类,其中有许多。 我想循环遍历所有字段,并为空字段做些事情。 例如,如果我的课程是: 在另一个位置,我将创建一个对象,并且想遍历该类中的所有字段。有点像这样: 我有什么办法可以做到这一点? 问题答案: 用于[班级] (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html)

  • 问题内容: 我试图遍历一个json文件的对象数组以访问其变量的键和值,并使用jquery的getjson及其每个将它们附加到列表项。 我认为该解决方案应该与本文中的解决方案类似…但是我似乎无法使其完全发挥作用并显示结果…非常感谢您的帮助! json数据的格式如下: 并且html的格式应如下所示: 问题答案: 您要替换为空白数组,从而在运行时破坏数据。删除此行,它应该工作。 编辑 :您的代码中还有一