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
В моем случае я получал эту ошибку, потому что я не использовал правильный ключ в моем запросе на сервере graphql.
Я отправлял запрос на mutation
и я думал, что ключ в объекте должен быть "mutation"
но оказывается, что запросы запроса и мутации используют ключевой "query"
.
xhr.open('POST', '/graphql');
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({
query: mutationString,
}));
Я использовал 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
});
}
Content-Type: application/json
. Вы должны обновить свой вопрос, указав, как вы пытаетесь отправить запрос на сервер.