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

GraphQL期望Iterable,但未为字段xxx找到Iterable。yyy

夏飞掣
2023-03-14

我目前正在使用NodeJS尝试GraphQL,我不知道为什么在以下查询中出现此错误:

{
  library{
    name,
    user {
      name
      email
    }
  }
}

我不确定,如果类型我的解析库是正确的,因为在任何例子中,我都看到他们使用了new GraphQL. GraphQLList(),但在我的情况下,我真的想返回一个用户对象,而不是用户数组。

我的代码:

const GraphQL = require('graphql');
const DB = require('../database/db');
const user = require('./user').type;

const library = new GraphQL.GraphQLObjectType({
    name: 'library',
    description: `This represents a user's library`,
    fields: () => {
        return {
            name: {
                type: GraphQL.GraphQLString,
                resolve(library) {
                    return library.name;
                }
            },
            user: {
                type: user,
                resolve(library) {
                    console.log(library.user);
                    return library.user
                }
            }
        }
    }
});

const resolveLibrary = {
    type: library,
    resolve(root) {
        return {
            name: 'My fancy library',
            user: {
                name: 'User name',
                email: {
                    email: 'test@123.de'
                }
           }
        }
    }
}

module.exports = resolveLibrary;

错误:

Error: Expected Iterable, but did not find one for field library.user.

因此,我的模式提供了一个user字段,该字段返回正确的数据(console.log)。

共有3个答案

司马洲
2023-03-14

我也有同样的问题。我使用的是find过滤器。

梁渊
2023-03-14

我猜你的userGraphQLList的一个实例,这就是为什么字段用户期望解析为一个可迭代的对象。

柳涵意
2023-03-14

我也遇到了这个问题。从解析器返回的内容似乎与模式中的返回类型不匹配。

特别是对于错误消息期望的Iterable,但没有找到一个字段library.user.,您的模式期望一个数组(Iterable),但您没有在解析器中返回数组

我在我的模式中有这个。js:

登录(邮箱:String,密码:String):【成功登录】

我把它改成了:

login(电子邮件:String,密码:String):SuccessfulLogin

请注意“SuccessfulLogin”周围的方括号。由您决定是更新解析器返回类型还是更新模式的期望

 类似资料:
  • 遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。 具有iterable类型的集合可以通过新的for ... of循环来遍历。 for ... of循环是ES6引入的新的语法,请测试你的浏览器是否支持: 'use strict'; var a = [1, 2, 3];

  • 我已经用MapStruct 1.1工作了几天,但还没有达到我所需要的。 我想做的是:我想将JPA实体映射到DTO,以便在Primefaces项目中实现更好的属性视图绑定。 所以我有我的实体如下: 病人JAVA 人JAVA 我想把这些实体画成这样: 耐心等待。JAVA 潘松多。JAVA 我编写了Mapper类和一个实用程序,就像GitHub上的官方示例中描述的那样(https://github.co

  • 什么是迭代? 例子: for a in b.value(): pass for x, y in de.items(): pass 字符串也可以 for a in 'abcv': pass 如何判断是否可以迭代 请看代码 from collections import Iterable isinstance('abc', Iterable) True 这里就引出了

  • 问题内容: 我对所有有趣的迭代器都非常着迷,但是我感到困惑的是这两个函数之间的区别以及为什么存在。 两种功能有什么区别? 问题答案: 前者只能处理不可打包的迭代。后者可以处理无法完全解包的可迭代对象,例如无限生成器。 考虑 此外,仅拆箱操作是一项急切的,前期成本高的活动,因此,如果您的迭代有效果,则希望懒惰地进行评估,这是您的最佳选择。

  • 我需要创建一个助手方法,该方法允许创建任何Iterable的和 然而,这种方法只适用于int,但我们也有double和long。因为不能有两个具有相同签名的方法(我们的编译器认为整数和(Iterable)) 但是这个方法不会编译(原因:操作符=是未定义的对象,对象)。我能在这里做什么?我知道在C中你可以重载运算符,但在Java中不行。但是每个扩展数字的类都会重载=运算符。我能在这里做什么? 提前谢

  • 问题内容: Iterables提供了两种方法 但只有一个 是否存在任何破坏对称性的设计/实现原因? 问题答案: 我认为要点是,没有理由可以使用来完成此操作。Guava尽力使API保持较小,因此没有添加可以/应该以其他方式轻松完成的事情。 另一方面,还没有一种机制可以测试iterable是否为空,如果是,则返回默认值而不是第一个值。因此,。 同样,没有简单的方法来获取最后一个元素,因此和