J'ai une configuration de base de requête GraphQL comme suit:
Query.js:
{ "data": null, "errors": [ { "message": "Cannot return null for non-nullable field Query.dogs.", "locations": [ { "line": 2, "column": 3 } ], "path": [ "dogs" ] } ] }
schéma. graphql:
query { dogs { name } }
J'ai créé une fonction createServer ()
pour démarrer le serveur comme suit:
XXX
J'ai ensuite essayé d'interroger chiens
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;
Mais au lieu d'obtenir les noms du tableau de chiens, j'ai eu l'erreur suivante à la place:
type Dog { name: String! } type Query { dogs: [Dog]! }
Qu'est-ce qui semble être à l'origine de cette erreur?
3 Réponses :
Le code ci-dessus fonctionne comme vous pouvez le voir dans codesandbox: https://codesandbox.io/s/olzj9vvpk5 < / a>
Mais quand je convertis Query en quelque chose comme {}
, cela renvoie la même erreur, veuillez donc vérifier vos chemins et console.log Query pour valider le chemin. Votre exportation semble correcte, 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 référentiel git public, veuillez partager le lien.
Le problème était apparemment avec une faute de frappe dans l'un de mes fichiers. J'ai marqué votre réponse comme correcte malgré tout parce que votre codepen m'a aidé à trouver la faute de frappe. À votre santé.
Dans mon cas, je crée un nouveau fichier Query.js dans le dossier src mais j'importe Query avec Query = require ('./ resolvers / Query') et y coder. Alors, essayez de vérifier le chemin, je pense que le problème est là.
Il semble que vous n'importez pas correctement Query.js ou que vos résolveurs ne sont pas configurés correctement. Veuillez montrer le reste du code pertinent, y compris comment vous construisez l'objet résolveurs et comment vous fournissez les définitions de type et les résolveurs au constructeur GraphQLServer.
@DanielRearden Ok, attendez.
@DanielRearden Mon
prisma.graphql
a plus de 300 lignes de code. Dois-je en copier une partie ou voulez-vous que je copie le tout?Je ne sais pas si d'autres définitions de type sont pertinentes. Je pense que vous avez du code qui ressemble à ceci: github.com/prisma/prisma-examples/blob/master/typescript/… et peut-être un fichier séparé comme celui-ci github.com/prisma/prisma-examples/blob/master/typescript/...
@DanielRearden Question mise à jour !!
Bizarre, je peux exécuter un serveur
graphql-yoga
avec les typesDef et résolveurs ci-dessus sans aucun problème. À moins que./resolvers/Query
ne soit pas le bon chemin pourQuery
, je ne suis pas sûr de ce qui pourrait être faux: /S'il s'agissait d'un chemin incorrect, le nœud ne pourrait pas le résoudre et générerait une erreur:
"Erreur: module introuvable ..."
et le serveur serait en panne. Il semble que cela résout, mais à un objet vide, donc le résolveurdogs
n'est pas là. Êtes-vous sûr que les exportationsQuery.js
sont correctes?@IonutAchim Puis-je vérifier si les exportations
Query.js
sont correctes? J'ai ajouté unconsole.log ("Query:" + Query)
dans la fonctioncreateServer ()
et il a renvoyéQuery: [Object Object]
.@AndrewL, le meilleur moyen est de vérifier les exportations du module. Le journal de la console peut être trompeur. Si vous ne deviez rien exporter, cela se résoudrait en un objet vide. Inspectez simplement le fichier et voyez quelles sont vos exportations.