web-dev-qa-db-ja.com

GraphQLはIterableを期待していましたが、フィールドxxx.yyyには見つかりませんでした

現在、NodeJSでGraphQLを試していますが、次のクエリでこのエラーが発生する理由はわかりません。

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

typeresolveLibraryが正しいかどうかはわかりません。どの例でも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が呼び出されます)。

25
Vetterjack

私もこの問題に遭遇しましたが、なぜこれが起こるのかは明らかです。リゾルバから返されるものは、スキーマの戻り値の型と一致しないようです。

特にエラーメッセージ_Expected Iterable, but did not find one for field library.user._の場合、スキーマではarray(Iterable)が必要ですが、リゾルバで配列を返していません

Schema.jsにこれがありました:

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

私はそれを次のように変更しました:

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

「SuccessfulLogin」を囲む角括弧に注意してください。リゾルバの戻り値の型を更新するか、スキーマの期待値を更新するかはあなた次第です

34
Vineeth

あなたのuserGraphQLListのインスタンスだと思うので、フィールドユーザーは反復可能なオブジェクトに解決することを期待しています。

4
Uziel Valdez

同じ問題がありました。代わりに検索フィルターを使用していました。

1
Alfrex92