83

I'm attempting to set up Apollo GraphQL support in a new React project, but when I try to compile a query using gql I keep receiving the error:

Syntax Error: Expected Name, found }

This is generated by the following code:

import gql from 'graphql-tag'

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

console.log(query)

I'm basing this code off the example code found here: https://github.com/apollographql/graphql-tag

What is the Name referred to in the error message? Does anyone know what I'm doing wrong here?

Soviut
  • 88,194
  • 49
  • 192
  • 260
Nathan
  • 1,897
  • 2
  • 15
  • 16

15 Answers15

60

This error occurs mostly when there are unclosed curly braces or when some fields are not properly defined while calling the query.

35

The accepted answer didn't solve my issue. Instead, it worked if you remove the initial curly brackets.

The query should look like this instead:

const query=gql`
  user(id: 5) {
    firstName
    lastName
  }
`
Pang
  • 9,564
  • 146
  • 81
  • 122
Joseph Lin
  • 351
  • 3
  • 2
  • 1
    Thanks this was my issue as well. Was doing a mutation and could not figure out that it didn't need the exterior curlies. – Zatara7 May 01 '19 at 05:44
18

The causes could be:

  • you are adding a "()" at the beginning for no reason
  • you need to add more 'nested' parameters.

Especially if you are using an online GraphiQL editor. Examples:

1- Wrong code (extra parenthesis)

{
  allFilms() {
    films {
      title
    }
  }
}

2- Wrong code (more parameters need it eg: title)

{
  allFilms {
    films {         
    }
  }
}

3- Correct code

{
  allFilms {
    films {
     title         
    }
  }
}
Juanma Menendez
  • 17,253
  • 7
  • 59
  • 56
10

GraphQLError: Syntax Error: Expected Name, found "$".

One more example of a similar error (For other users).

theErrorIsHere (Could be extra ( or { before the $varName) added before $speakerId

Error code:

const FEATURED_SPEAKER = gql`
  mutation markFeatured($speakerId: ID!, $featured: Boolean!){
    markFeatured(speaker_id: theErrorIsHere$speakerId , featured: $featured){
      id
      featured
    }
  }
`;

Error output

Correct code:

const FEATURED_SPEAKER = gql`
  mutation markFeatured($speakerId: ID!, $featured: Boolean!){
    markFeatured(speaker_id: $speakerId , featured: $featured){
      id
      featured
    }
  }
`;
Ezra Siton
  • 6,887
  • 2
  • 25
  • 37
  • I had the "Expected Name, found $" too. What I had done wrong was something like: markfeatured($speaker_id: $speaker_id ... So you can see I did a sloppy copy and paste meaning to get rid or the extra $ but I did not. – TelamonAegisthus Jul 28 '21 at 08:02
7

I'm not 100% sure what the root of my problem was, but moving all the query code into a separate es6 module fixed the issue. There must have been some kind of contamination from the surrounding code. For reference my query was embedded within a React component.

This works:

import gql from 'graphql-tag'

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

export default query
Nathan
  • 1,897
  • 2
  • 15
  • 16
5

Another cause for this error: you are referencing a type that is defined further down. Move the type you are referencing up.

For example:

    type Launch {
        rocket: Rocket
    }

    type Rocket {
        name: String
    }

will throw an error, as Launch references Rocket before Rocket is defined.

The corrected code:

    type Rocket {
        name: String
    }

    type Launch {
        rocket: Rocket
    }
ginna
  • 1,723
  • 1
  • 16
  • 16
3

In NestJS framework, this error happened to me because I defiled GraphQL field in my schema.graphql file as:

  lastUpdated(): Date

Instead it should be just

  lastUpdated: Date

(it doesn't take any argument)

justdvl
  • 698
  • 4
  • 15
2

In my case, I got the error simply because I'm adding : which I shouldn't have done.

e.g:

const query = `
   query($id: String!) {
      getUser(id: $id) {
        user: {
          id
          name
          email
          createdAt
        }
      }
   }
`

If you pay close attention to line 4 of the code above you'll realize that I added : after the user before the curly brace, then I began to list the user's data I wanna query and THAT WAS EXACTLY WHERE THE ERROR WAS! Removing the : solve the issue!

It should be:

user {
   id
   name
   ...
}
Shamxeed
  • 382
  • 4
  • 8
2

This can happen if you use gql from @clinet/apollo and in the backticks you try to inject dynamic js value. Remove it and replace with normal scalar and it will fix your issue. example:

${SOME_MAX_VALUE} -> 20

Tigran Petrosyan
  • 524
  • 4
  • 14
1

I was receiving a similar error server side:

GraphQLError: Syntax Error: Expected Name, found ]

I realized the cause in my case was a type definition with an empty array.

This breaks:

  type Settings {
    requires: []
  }

But this works:

  type Settings {
    requires: [String]
  }
Jiert
  • 565
  • 1
  • 5
  • 11
1

I had this problem and the cause was a string value with double-quotes inside double-quotes, like so: "this "is" bad".

SlothFriend
  • 601
  • 1
  • 7
  • 14
1

In my case I got the error because of the following:

const GET_POSTS_OF_AUTHOR = gql`
  query GetPostsOfAuthor($authorId: Int!) {
    postsOf($authorId: Int!) {
      id
      title
    }
  }
`;

When it should have been:

const GET_POSTS_OF_AUTHOR = gql`
  query GetPostsOfAuthor($authorId: Int!) {
    postsOf(authorId: $authorId) {
      id
      title
    }
  }
`;

erroneously thought $authorId passed through identically to the function call instead of setting a property inside the function call.

Wild Bill
  • 51
  • 1
  • 3
0

On ny side the error was caused by extra {} Curly braces. Solved by just removing them.

Gesy Darati
  • 113
  • 1
  • 6
0

I was getting the same error. In my case putting the id inside double quote solved the issue as the type of id required string value.

{
        product(id: "${id}") {
            name
        }
}
0

Posting here in case anyone else had this problem but you also get this error if you accidentally make your query look like json with colons (:).

ex:

data {
  property {
    key: {
      deepKey
    }
  }
}

will give the same error from GQL compile