AndrewL64
AndrewL64

Reputation: 16301

GraphQL query returns error "Cannot return null for non-nullable field"

I have a basic GraphQL query setup as follows:

Query.js:

const Query = {
    dogs(parent, args, ctx, info) {
        return [{ name: 'Snickers' }, { name: 'Sunny' }];
    },
};

module.exports = Query;

schema.graphql:

type Dog {
    name: String!
}
type Query {
    dogs: [Dog]!
}

I created a function createServer() for starting the server as follows:

const { GraphQLServer } = require('graphql-yoga');
const Mutation = require('./resolvers/Mutation');
const Query = require('./resolvers/Query');
const db = require('./db');

function createServer() {
    return new GraphQLServer({
        typeDefs: 'src/schema.graphql',
        resolvers: {
            Mutation,
            Query,
        },
        resolverValidationOptions: {
            requireResolversForResolveType: false,
        },
        context: req => ({ ...req, db }),
    });
}

module.exports = createServer;

I then tried querying dogs as follows:

query {
  dogs {
    name
  }
}

But instead of getting the names from the array of dogs, I got the following error instead:

{
  "data": null,
  "errors": [
    {
      "message": "Cannot return null for non-nullable field Query.dogs.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "dogs"
      ]
    }
  ]
}

What seems to be causing this error?

Upvotes: 6

Views: 13140

Answers (4)

Coni
Coni

Reputation: 1

This problem comes from AWS requiring certain standard values in the dynamoDB table, such as createdAt and updatedAd, just add these fields manually with a timestamp in dynamo db for further testing. A mutation always needs to be requested via id, this somehow was not clear to me when my schema was created by amplify codegen...

Upvotes: 0

Pranat Pannao
Pranat Pannao

Reputation: 143

In my case, I create a new Query.js file at the src folder but I import Query with Query = require('./resolvers/Query') and coding there. So, try to check the path, I think the problem is there.

Upvotes: 0

Charles Harring
Charles Harring

Reputation: 1035

I know this question has been answered, but for me the only thing that fixed this issue was to also pass the info argument.

Upvotes: 0

Harshit Pant
Harshit Pant

Reputation: 498

The above code works as you can see in codesandbox: https://codesandbox.io/s/olzj9vvpk5

But when I convert Query to something like {} it returns the same error so please check your paths and console.log Query to validate the path. Your export looks correct but you might have forgotten to save the file as I can see from the course starter files Query is an {}. Please double check.

Also if this code is in a public git repo please share the link.

Upvotes: 0

Related Questions