Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GraphQL Expected Iterable, but did not find one for field xxx.yyy

I'm currently trying GraphQL with NodeJS and I don't know, why this error occurs with the following query:

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

I am not sure if the type of my resolveLibrary is right, because at any example I had a look at they used new GraphQL.GraphQLList(), but in my case I really want to return a single user object, not an array of users.

My code:

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:

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

So my library schema provides a user field which returns the right data (the console.log is called).

like image 430
Vetterjack Avatar asked Oct 01 '17 14:10

Vetterjack


2 Answers

I ran into this problem as well. It appears that what you're returning from your resolver doesn't match the return type in your schema.

Specifically for the error message Expected Iterable, but did not find one for field library.user., your schema expects an array(Iterable) but you aren't returning an array in your resolver

I had this in my schema.js:

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

I changed that to:

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

Notice the square brackets around "SuccessfulLogin". It's up to you whether you want to update the resolver return type or update the schema's expectations

like image 65
Vineeth Pradhan Avatar answered Sep 24 '22 19:09

Vineeth Pradhan


I guess your user is an instance of GraphQLList that is why the field user is expecting to resolve to an iterable object.

like image 24
Uziel Valdez Avatar answered Sep 22 '22 19:09

Uziel Valdez