Синтаксическая ошибка GraphQL gql: найдено ожидаемое имя}

Я пытаюсь настроить поддержку Apollo GraphQL в новом проекте React, но когда я пытаюсь скомпилировать запрос, используя gql Я продолжаю получать сообщение об ошибке:

Syntax Error: Expected Name, found }

Это генерируется следующим кодом:

import gql from 'graphql-tag'

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

console.log(query)

Я основываю этот код на примере кода, найденного здесь: https://github.com/apollographql/graphql-tag

Что Name упоминается в сообщении об ошибке? Кто-нибудь знает, что я здесь делаю не так?

16 ответов

Решение

Я не уверен на 100%, в чем была причина моей проблемы, но перемещение всего кода запроса в отдельный модуль es6 устранило проблему. Должно быть, было какое-то загрязнение от окружающего кода. Для справки, мой запрос был встроен в компонент React.

Это работает:

import gql from 'graphql-tag'

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

export default query

Эта ошибка возникает главным образом, когда есть незакрытые фигурные скобки или когда некоторые поля не определены должным образом при вызове запроса.

Я нашел принятый ответ, чтобы не решить мою проблему. То, что я нашел, работало, если вы удалите начальные фигурные скобки. Запрос должен выглядеть следующим образом:

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

Причина может быть в том, что вы добавляете "()" без причины или вам нужно добавить дополнительные "вложенные" параметры. (Особенно, если вы используете онлайн-редактор GraphiQL)

Неверный код (лишние скобки)

{
  allFilms() {
    films {
      title
    }
  }
}

Неверный код (требуется больше параметров, например: заголовок)

{
  allFilms {
    films {         
    }
  }
}

Правильный код

{
  allFilms {
    films {
     title         
    }
  }
}

GraphQLError: синтаксическая ошибка: ожидаемое имя, найдено "$".

Еще один пример подобной ошибки (для других пользователей).

theErrorIsHere (Может быть дополнительно ( или же { перед $varName) добавлено перед $speakerId

Код ошибки:

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

Правильный код:

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

Другая причина этой ошибки: вы ссылаетесь на тип, определенный ниже. Переместите тип, на который вы ссылаетесь, вверх.

Например:

    type Launch {
        rocket: Rocket
    }

    type Rocket {
        name: String
    }

выдаст ошибку, так как Launch Ссылки Rocket перед Rocket определено.

Исправленный код:

    type Rocket {
        name: String
    }

    type Launch {
        rocket: Rocket
    }

В среде NestJS эта ошибка произошла со мной, потому что я испортил поле GraphQL в моем файле schema.graphql как:

        lastUpdated(): Date

Вместо этого должно быть просто

        lastUpdated: Date

(это не требует никаких аргументов)

Это может произойти, если вы используете gql из @clinet/apollo и в обратных кавычках пытаетесь ввести динамическое значение js. Удалите его и замените обычным скаляром, и это решит вашу проблему. пример:

${SOME_MAX_VALUE} -> 20

В моем случае я получил ошибку просто потому, что добавляю, чего не должен был делать.

например:

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

Если вы внимательно посмотрите на строку 4 приведенного выше кода, вы поймете, что я добавил после пользователя перед фигурной скобкой, затем я начал перечислять данные пользователя, которые хочу запросить, и ЭТО БЫЛО ТОЧНО, ГДЕ БЫЛА ОШИБКА! Удаление : решить вопрос!

Должен быть:

      user {
   id
   name
   ...
}

В моем случае я получил ошибку из-за следующего:

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

Когда это должно было быть:

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

ошибочно думал, что $ authorId передается идентично вызову функции, вместо того, чтобы устанавливать свойство внутри вызова функции.

У меня была эта проблема, и причиной было строковое значение с двойными кавычками внутри двойных кавычек, например: "this "is" bad".

Я получал аналогичную ошибку на стороне сервера:

GraphQLError: Syntax Error: Expected Name, found ]

Я понял, что причиной в моем случае было определение типа с пустым массивом.

Это ломается:

  type Settings {
    requires: []
  }

Но это работает:

  type Settings {
    requires: [String]
  }

У меня была такая же проблема, я только что решил ее, удалив Yarn.lock или package-lock.json , а затем переустановив node_modules. Я использовал apollographql/client, он используется для доступа к apollo GQL APIS. У меня сработало, не уверен насчет вас.
Просто попробуйте.

В любом случае ошибка была вызвана лишними {} фигурными скобками. Решается простым их удалением.

Я получал ту же ошибку. В моем случае размещение идентификатора внутри двойной кавычки решило проблему, так как тип требуемого строкового значения идентификатора.

Публикация здесь на случай, если у кого-то еще возникла эта проблема, но вы также получите эту ошибку, если случайно сделаете свой запрос похожим на json с двоеточиями (:).

бывший:

      data {
  property {
    key: {
      deepKey
    }
  }
}

выдаст ту же ошибку при компиляции GQL

Другие вопросы по тегам