首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphQL循环通过数组并得到所有结果

GraphQL循环通过数组并得到所有结果
EN

Stack Overflow用户
提问于 2018-01-18 12:44:20
回答 1查看 11K关注 0票数 13

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

代码语言:javascript
复制
var data = [];
data.title = results[0].title;
data.author = results[0].author;
return data;

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

因此,查询将变成如下所示:

代码语言:javascript
复制
{
  book(id:["9789025451608", "8974832789431","9789024576791"]){
    amazon{
      title
    },
    itunes{
      title
    }
  }
}

以及答复:

代码语言:javascript
复制
{
  "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。

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

我的查询看起来像下面的

代码语言:javascript
复制
{
  book(id:["9789025451608"]){
    amazon{
      title
    },
    itunes{
      title
    }
  }
}

和returns:

代码语言:javascript
复制
{
  "data": {
    "book": {
      "amazon": {
        "title": "De Moord op Commendatore"
      },
      "itunes": {
        "title": "Niet beschikbaar" // not available
      }
    }
  }
}

Schema.js

代码语言:javascript
复制
"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
});

RootQuery:

代码语言:javascript
复制
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;

Booktype

代码语言:javascript
复制
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;

AmazonType

代码语言:javascript
复制
const graphql = require('graphql');

const{
  GraphQLObjectType,
  GraphQLString,
  GraphQLList
} = graphql;


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

module.exports = AmazonType;

同样的代码也适用于ItunesType。

EN

回答 1

Stack Overflow用户

发布于 2021-08-22 22:34:31

如果要返回多本书,则图书字段的类型需要是一个GraphQL列表。

代码语言:javascript
复制
fields: () => ( {
    book: {
      type: new GrapQLList(BookType),
      args:{ id : { type: GraphQLString } },
      resolve (parentValue, args) {
       return resp = { id: args.id }
     }
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48321689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档