web-dev-qa-db-fra.com

Erreur de syntaxe GraphQL gql: nom attendu, trouvé}

J'essaie de configurer la prise en charge d'Apollo GraphQL dans un nouveau projet React, mais lorsque j'essaie de compiler une requête à l'aide de gql je reçois toujours l'erreur:

Syntax Error: Expected Name, found }

Ceci est généré par le code suivant:

import gql from 'graphql-tag'

const query = gql`
    {
      user(id: 5) {
        firstName
        lastName
      }
    }
  `

console.log(query)

Je fonde ce code sur l'exemple de code trouvé ici: https://github.com/apollographql/graphql-tag

À quoi le Name fait-il référence dans le message d'erreur? Est-ce que quelqu'un sait ce que je fais mal ici?

9
Nathan

Je ne suis pas sûr à 100% de l'origine de mon problème, mais le déplacement de tout le code de requête dans un module es6 distinct a résolu le problème. Il doit y avoir eu une sorte de contamination par le code environnant. Pour référence, ma requête a été intégrée dans un composant React.

Cela marche:

import gql from 'graphql-tag'

const query = gql`
{
  user(id: 5) {
    firstName
    lastName
  }
}
`

export default query
3
Nathan

Cette erreur se produit principalement lorsqu'il existe des accolades non fermées ou lorsque certains champs ne sont pas correctement définis lors de l'appel de la requête.

16

J'ai trouvé la réponse acceptée pour ne pas résoudre mon problème. Ce que j'ai trouvé qui a fonctionné, c'est si vous supprimez les crochets initiaux. La requête devrait plutôt ressembler à ceci:

const query=gql`
  user(id: 5) {
    firstName
    lastName
  }
`
4
Joseph Lin

Une autre cause de cette erreur: vous faites référence à un type défini plus bas. Déplacez le type auquel vous faites référence.

Par exemple:

    type Launch {
        rocket: Rocket
    }

    type Rocket {
        name: String
    }

générera une erreur, car Launch référence Rocket avant que Rocket ne soit défini.

Le code corrigé:

    type Rocket {
        name: String
    }

    type Launch {
        rocket: Rocket
    }
2
ginna