GraphQL短横线解析错误排查:如何正确传递查询语句?
问题原因
你犯了两个关键错误:
- 直接在GraphQL查询字符串里拼接
owner和repository的具体值,没有给字符串加引号。比如abcd-defg这种包含连字符的字符串,会被GraphQL解析器当成无效语法,导致报错。 - 虽然你定义了GraphQL查询变量
$owner和$repository,但实际查询里根本没使用这些变量,白做了变量定义的工作。
修正方案
- 修改查询函数,使用变量而非直接拼接值:让查询语句引用定义好的变量,既符合GraphQL规范,也能避免语法错误。
- 传递变量参数给请求:把定义好的
variables对象传给graphqlRequest,让GraphQL服务能正确解析变量值。 - 删除重复的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
相关产品推荐
相关产品推荐

