15

每次都在同一行出现 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
            }
            ]
        }
        ]
    }
4

7 回答 7

18

问题是因为您传递的查询可能是空的。

例如:

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 end of line issue

于 2018-06-13T21:11:05.573 回答
2

我在schema.graphql文件中有评论:

"""
Some comments
"""

我删除了评论,Unexpected <EOF>错误消失了。

于 2021-02-22T10:21:28.490 回答
0

这是因为没有实际的查询,所以您会得到意外的 EOF(文件结尾)。

猜测您正在使用 GraphiQL(因为您的 EOF 消息显示第 30 行);您需要在浏览器的 GraphiQL 左侧面板上添加查询。符合你RootQuery喜欢的东西:

{
  user(id: "1") {
    id,
    firstName,
    age
  }
}
于 2018-06-27T03:21:06.167 回答
0

我在尝试缝合我的模式时遇到了这个错误,这个错误的原因是我定义了一个类型但没有实现它,有空的主体,例如:

type User {

}

实现类型修复它

于 2020-06-29T19:24:01.583 回答
0

看起来我们是否正在使用模式优先的方法,但我们的项目/空文件中没有任何 .graphql 文件。我添加了这个,错误消失了:

src/example.graphql

type Query {
  hello: String
}

“GraphQLError:语法错误:Unexpected”错误来自 graphql 包。看起来@nestjs/graphql假设总是至少有一个 .graphql 文件,所以这可能是一个错误,试图解析一个空模式,而不是显示一个对开发人员更友好的消息或忽略它。

于 2021-01-19T13:17:11.947 回答
0

在大多数情况下,传递一个空查询会导致此错误。为避免这种情况,请在您的 graphiql 中尝试此操作

query { 
   user {
     fields you need to retrieve
  }
}
于 2021-02-14T04:39:03.453 回答
0

这是因为你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;
}

并确保解析器由模块导入,并将模块添加到 App.module

这应该解决它!

于 2021-06-09T11:27:29.103 回答