SyntaxError: Неожиданный токен <в JSON в позиции 0 при тестировании в Graphiql
Я изучаю GraphQL и новичок в этой технологии. Я не могу выяснить причину этой синтаксической ошибки. Когда я тестирую его на graphiql, он выдает неожиданную синтаксическую ошибку токена
Вот мой server.js:
const express = require("express");
const graphqlHTTP = require("express-graphql");
const schema = require("./schema");
const app = express();
app.get(
"/graphql",
graphqlHTTP({
schema: schema,
graphiql: true
})
);
app.listen(4000, () => {
console.log("Server listening to port 4000...");
});
Вот моя схема:
const {
GraphQLObjectType,
GraphQLString,
GraphQLInt,
GraphQLSchema,
GraphQLList,
GraphQLNotNull
} = require("graphql");
// HARD CODED DATA
const customers = [
{ id: "1", name: "John Doe", email: "jdoe@gmail.com", age: 35 },
{ id: "2", name: "Kelly James", email: "kellyjames@gmail.com", age: 28 },
{ id: "3", name: "Skinny Pete", email: "skinnypete@gmail.com", age: 31 }
];
// CUSTOMER TYPE
const CustomerType = new GraphQLObjectType({
name: "Customer",
fields: () => ({
id: { type: GraphQLString },
name: { type: GraphQLString },
email: { type: GraphQLString },
age: { type: GraphQLInt }
})
});
// ROOT QUERY
const RootQuery = new GraphQLObjectType({
name: "RootQueryType",
fields: {
customer: {
type: CustomerType,
args: {
id: { type: GraphQLString }
},
resolve(parentValue, args) {
for (let i = 0; i < customers.length; i++) {
if (customers[i].id == args.id) {
return customers[i];
}
}
}
},
customers: {
type: new GraphQLList(CustomerType),
resolve(parentValue, args) {
return customers;
}
}
}
});
module.exports = new GraphQLSchema({
query: RootQuery
});
Может ли кто-нибудь указать мне правильное направление? Я не могу понять проблему здесь?
2 ответа
Согласно документации для express-middleware
, вы должны смонтировать промежуточное ПО, используя app.use
в отличие от app.get
:
app.use('/graphql', graphqlHTTP({schema, graphiql: true}))
Это сделает GraphiQL доступным в браузере, но также позволит вам сделать POST
запросы к /graphql
конечная точка. Используя app.get
вы можете получить доступ к интерфейсу GraphiQL, но не можете POST
Запросы. Когда вы делаете запрос в GraphiQL, он пытается сделать POST
запрос к конечной точке, но, поскольку ваше приложение не настроено на его получение, запрос не выполняется. Ошибка, которую вы видите, является результатом попытки синтаксического анализа общих выражений ошибок для отсутствующего маршрута в JSON.
В моем случае это сообщение об ошибке было вызвано глупой ошибкой, поэтому, возможно, мой рассказ будет кому-то полезен:
Вместо того, чтобы иметь значение JSON с
{"query":"graphqlQueryHere ..."}
Я только что разместил простой запрос graphQL вместо JSON. Пожалуйста, посмотрите, что вы не делаете то же самое.