Неожиданный ‹EOF› при использовании graphql

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

const graphql = require('graphql')
const _ = require('lodash')
 const {
     GraphQLObjectType,
     GraphQLString,
     GraphQLInt,
     GraphQLSchema
 } = graphql

const users = [
    {id: '1', firstName: 'Ansh', age: 20},
    {id: '2', firstName: 'Ram', age: 21},
    {id: '3', firstName: 'Sham', age: 20}
]

 const UserType = new GraphQLObjectType({
     name: 'User',
     fields: {
        id: {type: GraphQLString},
        firstName: {type: GraphQLString},
        age: {type: GraphQLInt}
     }
 })

 const RootQuery = new GraphQLObjectType({
     name: 'RootQueryType',
          fields: {
             user: {
                 type: UserType,
                 args: {id: {type: GraphQLString}},
                 resolve(parentValue, args) { 
                    return _.find(users, {id: args.id})
                 }
             }
         }
     })

 module.exports = new GraphQLSchema({
    query: RootQuery 
})

Ошибка:

    {
        "errors": [
        {
            "message": "Syntax Error GraphQL request (30:1) Unexpected <EOF>\n\n29: \n30: \n    ^\n",
            "locations": [
            {
                "line": 30,
                "column": 1
            }
            ]
        }
        ]
    }

person Ansh Gujral    schedule 12.06.2018    source источник


Ответы (7)


Проблема в том, что запрос, который вы передаете, может быть пустым.

Например:

curl -X POST http://localhost:4000/graphql \ 
-H "Content-Type: application/json" \
-d '{"query": "{ user { id } }"}'

работает отлично.

Но если вы сделаете что-то вроде:

curl -X POST http://localhost:4000/graphql \
-H "Content-Type: application/json" \
-d '{"query": ""}'

Вы получите неожиданное ‹ EOF >

Кроме того, проверьте конец строки GraphQL.

person Marco Daniel    schedule 13.06.2018

У меня были комментарии в файле schema.graphql:

"""
Some comments
"""

Я удалил комментарии, и ошибка Unexpected <EOF> исчезла.

person Sharkey    schedule 22.02.2021

Это потому, что фактического запроса нет, поэтому вы получаете неожиданный EOF (конец файла).

Предполагая, что вы используете GraphiQL (потому что в вашем сообщении EOF указана строка 30); вам нужно добавить запрос на левой панели GraphiQL в браузере. Что-то, что соответствует вашему RootQuery, например:

{
  user(id: "1") {
    id,
    firstName,
    age
  }
}
person Mallory-Erik    schedule 27.06.2018

Я получил эту ошибку при попытке сшить мою схему, причина этой ошибки заключалась в том, что я указал тип, но не реализовал его, имел пустое тело, например:

type User {

}

реализация типа исправила это

person amirNamdar    schedule 29.06.2020
comment
где ты это добавил? - person Sandip Subedi; 08.06.2021

Похоже, что если мы используем подход, основанный на схеме, но у нас нет файлов .graphql в вашем проекте/пусто. Я добавил это, и ошибка исчезла:

src/example.graphql

type Query {
  hello: String
}

Ошибка GraphQLError: Syntax Error: Unexpected исходит из пакета graphql. Похоже, что @nestjs/graphql предполагает, что всегда будет по крайней мере один файл .graphql, поэтому, вероятно, это ошибка, чтобы попытаться проанализировать пустую схему вместо отображения более удобного для разработчиков сообщения или игнорировать его.

person Muhammad Usama Rabani    schedule 19.01.2021

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

query { 
   user {
     fields you need to retrieve
  }
}
person Dinush Chathurya    schedule 14.02.2021

Это потому, что ваш graphql.gql выглядит так:

# ------------------------------------------------------
# THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
# ------------------------------------------------------

directive @key(fields: String!) on OBJECT | INTERFACE

directive @extends on OBJECT | INTERFACE

directive @external on OBJECT | FIELD_DEFINITION

directive @requires(fields: String!) on FIELD_DEFINITION

directive @provides(fields: String!) on FIELD_DEFINITION

Одна вещь, которую вы можете сделать, это создать фиктивный преобразователь.

// src/graphql/resolvers/user.resolver.ts

import { Resolver, Query } from '@nestjs/graphql';

import { User } from 'models/User.model';

@Resolver(() => User)
export class UserResolver {
  @Query(() => User)
  async ids() {
    return [];
  }
}

и создайте модель graphql:

// src/graphql/models

import { Field, ObjectType } from '@nestjs/graphql';

@ObjectType()
export class User {
  @Field()
  createdAt: Date;
}

Это должно исправить это!

person Sandip Subedi    schedule 09.06.2021