web-dev-qa-db-fra.com

La requête GraphQL renvoie l'erreur "Impossible de retourner null pour le champ non nullable"

J'ai une configuration de base de requête GraphQL comme suit:

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]!
}

J'ai créé une fonction createServer() pour démarrer le serveur comme suit:

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;

J'ai ensuite essayé d'interroger dogs comme suit:

query {
  dogs {
    name
  }
}

Mais au lieu d'obtenir les noms de la série de chiens, j'ai plutôt l'erreur suivante:

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

Qu'est-ce qui semble être à l'origine de cette erreur?

6
AndrewL64

Le code ci-dessus fonctionne comme vous pouvez le voir dans codesandbox: https://codesandbox.io/s/olzj9vvpk5

Mais quand je convertis Query en quelque chose comme {} il renvoie la même erreur, veuillez donc vérifier vos chemins et requête console.log pour valider le chemin. Votre export semble correct mais vous avez peut-être oublié d'enregistrer le fichier comme je peux le voir dans les fichiers de démarrage du cours. La requête est un {}. Veuillez vérifier.

De plus, si ce code est dans un dépôt git public, veuillez partager le lien.

0
Harshit Pant

Je sais que cette question a été répondue, mais pour moi, la seule chose qui a résolu ce problème était de passer également l'argument info.

0
Charles Harring