У меня такая же проблема. Я использовал поиск вместо фильтра.

тоящее время я пробую GraphQL с NodeJS, и я не знаю, почему эта ошибка возникает со следующим запросом:

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

Я не уверен, чтоtype из моегоresolveLibrary правильно, потому что на любом примере я взглянул на они использовали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: '[email protected]'
                }
           }
        }
    }
}

module.exports = resolveLibrary;

Ошибка:

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

Так что мойlibrary схема обеспечиваетuser поле, которое возвращает правильные данные (вызывается console.log).

 Jacob01 янв. 2019 г., 01:35
Покажите в редактировании ваше решение, пожалуйста?
 Daniel Rearden01 окт. 2017 г., 18:54
Похоже, что проблема связана с типом пользователя, который вы импортируете. Можете ли вы обновить свой вопрос, чтобы включить код дляuser.js?
 Vetterjack01 окт. 2017 г., 21:12
Большое спасибо, вы были правы, экспорт моего user.js был неправильным ...

Ответы на вопрос(2)

user является примеромGraphQLList именно поэтому полевой пользователь ожидает преобразования в итерируемый объект.

но, кажется, совершенно очевидно, почему это происходит. Похоже, что то, что вы возвращаете из своего преобразователя, не соответствует типу возврата в вашей схеме.

Специально для сообщения об ошибкеExpected Iterable, but did not find one for field library.user.ваша схема ожидает массив (итерируемый), но вы не возвращаете массив в своем преобразователе

У меня было это в моем schema.js:

login(email: String, password: String): [SuccessfulLogin]

Я изменил это на:

login(email: String, password: String): SuccessfulLogin

Обратите внимание на квадратные скобки вокруг «SuccessfulLogin». Вам решать, хотите ли вы обновить тип возвращаемого значения преобразователя или обновить ожидания схемы

 Jacob01 янв. 2019 г., 01:33
Черт, я что-то поменял и забыл поменять обратно lmao. Благодарю.
 Vineeth19 авг. 2018 г., 07:53
Квадратные скобки @Liang означают, что в ответе JSON вы должны ожидать итеративный объект или массив. Извиняюсь за поздний ответ
 Liang21 авг. 2018 г., 11:39
спасибо и не беспокойтесь. я думаю, что получил это сейчас,[] означает, что он должен вернутьсяarray, без, вернемobject
 Liang24 июл. 2018 г., 00:37
Привет @vineeth, спасибо за обновление, у меня есть еще один вопрос, для чего нужны квадратные скобки? кажется хорошо без них

Ваш ответ на вопрос