使用BuildSchema时出现GraphQL语法错误(Node.js+TypeScript)
GraphQL buildSchema 语法错误排查与解决
问题场景
在Node.js+TypeScript项目中集成GraphQL时,调用buildSchema方法触发语法错误,错误信息如下:
return new _GraphQLError.GraphQLError("Syntax Error: ".concat(description), undefined, source, [position]); ^ GraphQLError [Object]: Syntax Error: Expected Name, found "}".
错误原因分析
查看代码后,定位到两处不符合GraphQL语法规范的问题:
- 类型拼写错误:
UserSchema中age字段的类型写成了Init!,GraphQL内置整数类型应为Int!,不存在Init类型。 - 空类型定义无效:
UserRootMutation是空字符串,导致主Schema生成type RootMutation {}的代码,GraphQL不允许定义无任何字段的类型,直接触发语法解析错误。
修复步骤
1. 修正类型拼写错误
修改user.schema.ts中的UserSchema,将错误的Init!替换为合法的Int!:
export const UserSchema = ` type User { userName: String! age: Int! country: String! gender: String! } `;
2. 处理空Mutation类型
根据项目需求选择以下两种方案之一:
方案一:暂时不需要Mutation,移除相关定义
修改主schema.ts,删除RootMutation类型及schema中的mutation配置:
import { UserSchema, UserRootQuery } from "./user.schema"; const Schema = ` ${UserSchema} type RootQuery { ${UserRootQuery} } schema { query: RootQuery } `; export default Schema;
可选择性删除user.schema.ts中无用的UserRootMutation导出。
方案二:添加合法的Mutation字段
如果后续需要Mutation功能,先定义至少一个合法字段(占位或实际逻辑均可):
// user.schema.ts export const UserRootMutation = ` createUser(userName: String!, age: Int!, country: String!, gender: String!): User `;
此时主Schema中的RootMutation拥有合法字段,语法错误会被消除。
验证修复
修改完成后重启服务,buildSchema即可正常解析Schema定义,原语法错误不再出现。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

