GraphQL gql语法错误:找到了预期名称}

时间:2018-01-18 22:06:20

标签: syntax-error graphql apollo react-apollo graphql-tag

我正在尝试在新的React项目中设置Apollo GraphQL支持,但是当我尝试使用gql编译查询时,我一直收到错误:

Syntax Error: Expected Name, found }

这是由以下代码生成的:

import gql from 'graphql-tag'

const query = gql`
    {
      user(id: 5) {
        firstName
        lastName
      }
    }
  `

console.log(query)

我的代码基于此处的示例代码:https://github.com/apollographql/graphql-tag

错误消息中提到的Name是什么?有谁知道我在这里做错了什么?

10 个答案:

答案 0 :(得分:9)

当出现未闭合的花括号或者在调用查询时未正确定义某些字段时,会发生此错误。

答案 1 :(得分:4)

我找到了可以解决我的问题的可接受答案。我发现行之有效的是,如果您删除了最初的大括号。 查询应该看起来像这样:

const query=gql`
  user(id: 5) {
    firstName
    lastName
  }
`

答案 2 :(得分:3)

我不能100%确定问题的根源是什么,但将所有查询代码移到单独的es6模块中解决了问题。周围的代码肯定会有某种污染。作为参考,我的查询嵌入在React组件中。

这有效:

import gql from 'graphql-tag'

const query = gql`
{
  user(id: 5) {
    firstName
    lastName
  }
}
`

export default query

答案 3 :(得分:2)

GraphQLError:语法错误:预期名称,找到的“ $”。

另一个类似错误的示例(对于其他用户)。

theErrorIsHere(可能是(之前添加的{{1}之前的{$varName

错误代码:

$speakerId

Error output

正确的代码:

const FEATURED_SPEAKER = gql`
  mutation markFeatured($speakerId: ID!, $featured: Boolean!){
    markFeatured(speaker_id: theErrorIsHere$speakerId , featured: $featured){
      id
      featured
    }
  }
`;

答案 4 :(得分:1)

此错误的另一原因:您所引用的类型进一步定义。向上移动要引用的类型。

例如:

    type Launch {
        rocket: Rocket
    }

    type Rocket {
        name: String
    }

将引发错误,因为Launch在定义Rocket之前引用了Rocket

更正的代码:

    type Rocket {
        name: String
    }

    type Launch {
        rocket: Rocket
    }

答案 5 :(得分:1)

我收到了类似的错误服务器端消息:

GraphQLError: Syntax Error: Expected Name, found ]

我意识到在我的情况下,原因是带有空数组的类型定义。

此中断:

  type Settings {
    requires: []
  }

但这可行:

  type Settings {
    requires: [String]
  }

答案 6 :(得分:1)

我遇到了这个问题,原因是双引号内有双引号的字符串值,如下所示:"this "is" bad"

答案 7 :(得分:0)

原因可能是您无缘无故地添加了“()”,或者您需要添加更多的“嵌套”参数。 (特别是如果您使用在线GraphiQL编辑器)

代码错误(带括号)

{
  allFilms() {
    films {
      title
    }
  }
}

代码错误(需要更多参数,例如:title)

{
  allFilms {
    films {         
    }
  }
}

正确的代码

{
  allFilms {
    films {
     title         
    }
  }
}

答案 8 :(得分:0)

在纽约方面,错误是由额外的 {} 花括号引起的。只需删除它们即可解决。

答案 9 :(得分:0)

就我而言,由于以下原因而出现错误:

const GET_POSTS_OF_AUTHOR = gql`
  query GetPostsOfAuthor($authorId: Int!) {
    postsOf($authorId: Int!) {
      id
      title
    }
  }
`;

应该是什么时候:

const GET_POSTS_OF_AUTHOR = gql`
  query GetPostsOfAuthor($authorId: Int!) {
    postsOf(authorId: $authorId) {
      id
      title
    }
  }
`;

错误地认为 $authorId 以相同的方式传递给函数调用,而不是在函数调用中设置属性。