我正在尝试在新的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
是什么?有谁知道我在这里做错了什么?
答案 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)
另一个类似错误的示例(对于其他用户)。
theErrorIsHere
(可能是(
之前添加的{{1}之前的{
或$varName
)
错误代码:
$speakerId
正确的代码:
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 以相同的方式传递给函数调用,而不是在函数调用中设置属性。