GraphQL: ошибка: необходимо предоставить документ

1

UPDATE: apollo обновил код и документы, поэтому выпуск не имеет значения сейчас

Предполагаемый результат

запустите apollo-server-express, используя следующий фрагмент из https://github.com/apollographql/apollo-tutorial-kit.

import express from 'express';
import { graphqlExpress, graphiqlExpress } from 'apollo-server-express';
import bodyParser from 'body-parser';
import schema from './data/schema';

const GRAPHQL_PORT = 3000;

const graphQLServer = express();

graphQLServer.use('/graphql', bodyParser.json(), graphqlExpress({ schema }));
graphQLServer.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' }));

graphQLServer.listen(GRAPHQL_PORT, () => console.log('GraphiQL is now running on http://localhost:${GRAPHQL_PORT}/graphiql'));

Фактический результат:

В любой реализации apollo-server-express, используя docs, используя https://github.com/apollographql/apollo-tutorial-kit и т.д., Я получаю следующую трассировку стека снова и снова:

Error: Must provide document
    at invariant (~/node_modules/graphql/jsutils/invariant.js:18:11)
    at Object.validate (~/node_modules/graphql/validation/validate.js:58:34)
    at doRunQuery (~/node_modules/apollo-server-core/dist/runQuery.js:80:38)
    at ~/node_modules/apollo-server-core/dist/runQuery.js:20:54
    at <anonymous>

Как воспроизвести проблему:

git clone https://github.com/apollographql/apollo-tutorial-kit.git
cd apollo-tutorial-kit
yarn/npm i
npm start
  • 1
    4 месяца назад, я думаю, что очень стар для Аполлона, который постоянно меняется
  • 1
    Стартовый комплект работает нормально. Это звучит как ошибка, которую вы получаете в ответ на ваш запрос. Обычно эта ошибка выдается, когда тело запроса искажено или отсутствует заголовок Content-Type: application/json . Вы должны обновить свой вопрос, указав, как вы пытаетесь отправить запрос на сервер.
Показать ещё 1 комментарий
Теги:
graphql
graphql-js
apollo
apollo-server

2 ответа

5

В моем случае я получал эту ошибку, потому что я не использовал правильный ключ в моем запросе на сервере graphql.

Я отправлял запрос на mutation и я думал, что ключ в объекте должен быть "mutation" но оказывается, что запросы запроса и мутации используют ключевой "query".

xhr.open('POST', '/graphql');
xhr.setRequestHeader("Content-Type", "application/json");

xhr.send(JSON.stringify({
  query: mutationString,
}));
  • 0
    Это исправило проблему для меня, спасибо!
-1

Я использовал JQuery Ajax для HTTP-запроса на сервер graphql (apollo-server-express) и получал эту ошибку при запросе на мутацию. Причина была такой же, как описано spencer.sm. Чтобы помочь другим гуглерам, я вставляю здесь полный method-

(function() {
    globals.makeGraphQLRequest('graphql', {
        query: 'query($email: String!) {
            profile(email: $email) {
                id mobile name email dob gender
            }
        }',
        variables: {
            email: '[email protected]'
        }
    }, function successCallback(response) {
        console.log(response);
    });

    globals.makeGraphQLRequest('graphql', {
        query: 'mutation($email: String!) {
            updateUser(email: $email) {
                email
            }
        }',
        variables: {
            email: '[email protected]'
        }
    }, function successCallback(response) {
        console.log(response);
    });
}());

makeGraphQLRequest-

globals.makeGraphQLRequest = function(url, params, successCallback) {
    $.ajax({
        url: url,
        method: 'post',
        data: params,
        dataType: 'json',
        success: function(response) {
            successCallback(response);
        },
        error: globals.ajaxErrorHandler
    });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню