You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL短横线解析错误排查:如何正确传递查询语句?

问题原因

你犯了两个关键错误:

  • 直接在GraphQL查询字符串里拼接owner和repository的具体值,没有给字符串加引号。比如abcd-defg这种包含连字符的字符串,会被GraphQL解析器当成无效语法,导致报错。
  • 虽然你定义了GraphQL查询变量$owner和$repository,但实际查询里根本没使用这些变量,白做了变量定义的工作。
修正方案
  1. 修改查询函数,使用变量而非直接拼接值:让查询语句引用定义好的变量,既符合GraphQL规范,也能避免语法错误。
  2. 传递变量参数给请求:把定义好的variables对象传给graphqlRequest,让GraphQL服务能正确解析变量值。
  3. 删除重复的headers定义:代码里重复声明了headers变量,会导致语法错误,需要删掉其中一个。

修正后的完整代码:

export function queryDependencyGraph() {
    return `query ($owner: String!, $repository: String!) {
        repository(owner: $owner, name: $repository) {
          url
          name
          dependencyGraphManifests(withDependencies: true) {
            nodes{
              dependencies {
                nodes{
                  packageManager
                  packageName
                  requirements
                }
              }
            }
            pageInfo {
              hasNextPage
              endCursor
            }
          }
        }
      }
    `
}

const query = queryDependencyGraph()
const headers: Record<string, string> = {
    "Accept": "application/vnd.github.hawkgirl-preview+json",
    "Content-Type": "application/json"
}
const variables: Record<string, string> = {
    owner: 'abcd-defg', 
    repository: 'xxx'
}

const response = await graphqlRequest("https://api.github.com/graphql", { 
    query: query, 
    headers: headers,
    variables: variables
});
额外说明
  • 使用变量后,GraphQL服务会自动处理字符串的引号和转义,不需要你手动处理,彻底避免类似的语法解析错误。
  • 变量还能让查询语句更通用,同一个查询可以复用在不同的owner和repository上,不用每次都重新生成查询字符串。

内容的提问来源于stack exchange,提问作者semural

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:46:18