graphql - 使用 apollo 服务器运行此查询时出现 GraphQL 错误。任何人都知道它有什么问题吗?
问题描述
我正在尝试从 GitHub GraphQL 获取一些数据,但我得到了一个 GaphQLError。我在 github 的开发人员部分尝试了相同的查询,它可以工作。有谁知道它有什么问题?
issueQuery = gql`
query search(first: 10, type: ISSUE, query: "repo:angular/angular is:issue state:open") {
issueCount
edges {
node {
... on Issue {
createdAt
title
body
url
comments(first: 10) {
nodes {
body
}
}
}
}
}
}
`;
错误堆栈跟踪:
"GraphQLError: Syntax Error: Expected $, found Name "first"
at syntaxError (http://localhost:4200/vendor.js:70270:10)
at expect (http://localhost:4200/vendor.js:75154:67)
at parseVariable (http://localhost:4200/vendor.js:73984:3)
at parseVariableDefinition (http://localhost:4200/vendor.js:73970:15)
at many (http://localhost:4200/vendor.js:75222:16)
at parseVariableDefinitions (http://localhost:4200/vendor.js:73959:82)
at parseOperationDefinition (http://localhost:4200/vendor.js:73926:26)
at parseExecutableDefinition (http://localhost:4200/vendor.js:73881:16)
at parseDefinition (http://localhost:4200/vendor.js:73845:16)
at many (http://localhost:4200/vendor.js:75222:16)"
在参数前添加 $ 时的新错误堆栈跟踪:
"GraphQLError: Syntax Error: Expected Name, found Int "10"
at syntaxError (http://localhost:4200/vendor.js:70270:10)
at expect (http://localhost:4200/vendor.js:75154:67)
at parseName (http://localhost:4200/vendor.js:73809:15)
at parseNamedType (http://localhost:4200/vendor.js:74385:11)
at parseTypeReference (http://localhost:4200/vendor.js:74364:12)
at parseVariableDefinition (http://localhost:4200/vendor.js:73971:83)
at many (http://localhost:4200/vendor.js:75222:16)
at parseVariableDefinitions (http://localhost:4200/vendor.js:73959:82)
at parseOperationDefinition (http://localhost:4200/vendor.js:73926:26)
at parseExecutableDefinition (http://localhost:4200/vendor.js:73881:16)"
解决方案
不要将操作与正在查询的实际字段混淆。语法应如下所示:
operationType [operationName] [variableDefinitions] {
selectionSet
}
其中operationType
一个或是调试query
中使用的操作的任意名称,是您在操作中引用的任何变量的类型定义,并且是您实际查询的一个或多个字段。mutation
subscription
operationName
variableDefinitions
selectionSet
在这种情况下,search
是我们要查询的字段,因此不应以query
关键字开头。如果您经过身份验证,这可以正常工作:
query OptionalName {
search(first: 10, type: ISSUE, query: "repo:angular/angular is:issue state:open") {
issueCount
edges {
# more fields
}
}
}
如果操作类型是query
,则可以完全省略query
关键字。这称为“查询速记”:
{
search(first: 10, type: ISSUE, query: "repo:angular/angular is:issue state:open") {
issueCount
edges {
# more fields
}
}
}
如果您使用变量,请在操作旁边的括号内定义它们。变量名称是任意的,但按照惯例,我们使用它们将用于的输入字段名称:
query OptionalName ($first: Int, type: SearchType!, $query: String! ) {
search(first: $first, type: $type, query: $query) {
issueCount
edges {
# more fields
}
}
}
推荐阅读
- php - 通过本地主机通过 MAMP (OS X) 在 htdocs 中打开 PHP 文件的快速方法
- android - 'Cordova run android --device' 命令的 BLE 访问问题?
- java - 从正在运行的 JVM 进程中查找应用程序属性键值
- python - 检查是否可以通过给定长度的跳跃来达到一个数字?
- assembly - 如何为 6502 CPU (C64) 设置 CMake 交叉组装工具链?
- python - 提高挂载目录的 IO 性能?
- javascript - Mapbox,悬停在侧边栏元素上时反弹相应的标记
- mysql - 我正在尝试遵循 MySQL 查询但在 xampp 中不起作用
- scala - 什么是集合的非展平 Scala 向量:(1 到 2).flatMap((1 到 3).toSet.subsets(_))?
- excel - VBA 中的日期格式