GraphQL语法错误求助:Expected Name, found '}'问题排查
解决GraphQL语法错误:
GraphQLError: Syntax Error: Expected Name, found "}" 这个错误核心是你的GraphQL Schema存在语法不规范问题,大概率是字段名缺失、花括号不匹配,或者某位置格式不符合GraphQL规范,下面分文件给出针对性排查方向:
一、先排查schema.ts的常见问题
- 检查所有类型(type/interface/input)的花括号是否完整配对,比如有没有写了
type User {却没写闭合的},或者中间字段定义打断了结构 - 检查每个字段的定义格式:必须是
字段名: 类型(可加!表示非空),不能出现type Query { : String! }这种缺失字段名的情况 - 检查是否存在多余的逗号,比如字段列表最后一个字段后加了逗号(部分GraphQL解析器对这个敏感)
- 检查自定义标量、指令的语法是否正确,比如
scalar DateTime是否写在正确位置,有没有拼写错误
二、再排查resolver.ts的问题
- 确保resolver对象的键名和schema中的类型/字段完全匹配(包括大小写),比如schema里Query的字段是
getUser,resolver里不能写成getuser - 检查resolver的对象结构,有没有漏写花括号或者逗号,比如某个字段的函数定义后漏了逗号,导致对象解析异常
- 暂时注释部分resolver内容,只保留最基础结构(比如Query下只留一个简单字段),看服务器能否启动,定位问题字段
三、最后检查app.ts的整合逻辑
- 确认schema是否用
gql标签正确包裹,比如const typeDefs = gql你的schema内容``,不能直接传字符串 - 检查GraphQL服务器库(比如Apollo Server)的初始化代码,比如
new ApolloServer({ typeDefs, resolvers })是否正确传入了schema和resolver,有没有拼写错误 - 暂时去掉其他中间件(比如跨域、日志中间件),排除其他代码干扰
快速排查步骤
- 把schema.ts中的内容复制到GraphQL Playground的Schema面板,它会直接标出语法错误的具体行号
- 用编辑器的括号匹配功能(比如VS Code按
Ctrl+Shift+\)定位不配对的花括号 - 先写一个极简的schema和resolver测试:
type Query { hello: String! }
const resolvers = { Query: { hello: () => "Hello World" } }
看服务器能否正常启动,再逐步加回原有代码,定位出错部分
如果还是找不到问题,把报错位置附近的代码片段贴出来,能更快定位问题。
内容的提问来源于stack exchange,提问作者Mikey
相关产品推荐
相关产品推荐

