現在、NodeJSでGraphQLを試していますが、次のクエリでこのエラーが発生する理由はわかりません。
_{
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が呼び出されます)。
私もこの問題に遭遇しましたが、なぜこれが起こるのかは明らかです。リゾルバから返されるものは、スキーマの戻り値の型と一致しないようです。
特にエラーメッセージ_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」を囲む角括弧に注意してください。リゾルバの戻り値の型を更新するか、スキーマの期待値を更新するかはあなた次第です
あなたのuser
はGraphQLList
のインスタンスだと思うので、フィールドユーザーは反復可能なオブジェクトに解決することを期待しています。
同じ問題がありました。代わりに検索フィルターを使用していました。