Почему я получил ошибку: не могу запросить поле xx для типа «Query»?

Хотя я скопировал и вставил запрос graphQL из инструмента GraphiQL после того, как успешно протестировал его на GraphiQL, запрос вернул с ошибкой, когда я попробовал его в клиенте Apollo в приложении responseJS:

[GraphQL error]: Message: Cannot query field "allStudents" on type "Query"., Location: [object Object], Path: undefined

Вот моя реализация:

const link = createHttpLink({
  uri: 'http://localhost:8000/graphql',
  fetchOptions: { method: "POST" }
});

const client = new ApolloClient({
  link: link 
});

const GET_STUDENTS = gql`
query getStudents($schoolID: Int!){
  allStudents(schoolId: $schoolID){
    pickUpLat
    pickUpLng
  }
}
`;

client
  .query({
    query: GET_STUDENTS,
    variables: { schoolID: 1 }
  })
  .then(result => console.info(result));

Что могло быть не так? вот правильный ответ, которого я ожидал:

{
  "data": {
    "allStudents": [
      {
        "pickUpLat": 31.9752942479727,
        "pickUpLng": 35.8438429235775
      },
      {
        "pickUpLat": 31.9754545979993,
        "pickUpLng": 35.8437478537235
      }
    ]
  }
}

РЕДАКТИРОВАТЬ Я получаю ожидаемые результаты с помощью GraphiQL: Почему я получил ошибку: не могу запросить поле xx для типа «Query»?

РЕДАКТИРОВАТЬ2

Я попытался сравнить полезную нагрузку между моим запросом и запросом GraphiQL:

Полезная нагрузка моего запроса: (у него есть __typename, я не знаю почему)

{"operationName":"getStudents","variables":{"schoolID":1},"query":"query getStudents($schoolID: Int) {\n  allStudents(schoolId: $schoolID) {\n    pickUpLat\n    pickUpLng\n    __typename\n  }\n}\n"}

Полезная нагрузка запроса GraphiQL:

{"query":"query getStudents($schoolID: Int!){\n  allStudents(schoolId: $schoolID){\n    pickUpLat\n    pickUpLng\n  }\n}","variables":{"schoolID":1},"operationName":"getStudents"}

Итак, они почти идентичны. Есть идеи?

ваша переменная - schoolId, а в запросе - $schoolID, это может быть проблемой

bennygenel 20.05.2018 14:15

Я обнаружил, что это должен быть schoolID, а не schoolId, я также попробовал $schoolID, но получил ту же ошибку, пожалуйста, см. РЕДАКТИРОВАТЬ выше, он показывает, что schoolID - правильное имя переменной в разделе QUERY VARIABLES .. как я могу получить более подробную информацию об ошибке ?

simo 20.05.2018 14:20

Какую версию apollo-client вы используете? Вы должны настроить клиент с кешем, например apollo-cache-inmemory, и обычно ваш клиент выдает ошибку, если вы пытаетесь использовать его, не сделав этого.

Daniel Rearden 20.05.2018 21:07

Я обнаружил, что моя проблема связана с github.com/apollographql/apollo-link/issues/609

simo 21.05.2018 10:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
22
4
24 321
3

Ответы 3

Для всех, кто может искать эту проблему, убедитесь, что вы импортируете ApolloClient из пакета apollo-client, а не из других пакетов.

В моем случае я определил запрос, который не требовал никаких параметров, и он возвращал бы массив объектов:

myBasicQuery: [BasicAnswer]

type BasicAnswer {
  name String
  phone String
}

Я получал ошибку: Cannot query field \"BasicAnswer\" on type \"BasicAnswer\", когда объявил это так:

query myBasicQuery {
  BasicAnswer {
      name
      phone
  }
}

Если оставить только поля BasicAnswer, проблема решена:

query myBasicQuery {
    name
    phone
}

Ошибка моего запроса заключалась в том, что я не загрузил новую схему.

Вы можете скачать схему с помощью: apollo schema:download --endpoint=http://localhost:8080/graphql schema.json

замените http: // localhost: 8080 / graphql на конечную точку вашего сервера

Вы можете увидеть больше на https://www.apollographql.com/docs/ios/downloading-schema/

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