Apollo GraphQL语法错误:预期']'却发现':'问题求助
问题解决:GraphQL数组类型定义语法错误
错误提示GraphQLError: Syntax Error: Expected "]", found ":"完全是因为你在GraphQL类型定义里的数组写法不符合语法规范。GraphQL不允许直接在数组括号内写[key: String!, value: String!]这种键值对结构,必须先定义独立的嵌套对象类型,再用数组包裹该类型。
具体修改步骤
- 新增两个嵌套对象类型
Label和ValueEntry,对应mongoose模型里的数组元素结构 - 修改
Metric类型和addMetricmutation参数中的数组类型,替换为合法的[Label!]和[ValueEntry!]
修改后的typeDefs.js代码如下:
const { gql } = require("apollo-server-express"); const typeDefs = gql` type User { _id: ID firstName: String lastName: String email: String } # 匹配mongoose模型中labels数组的元素结构 type Label { key: String! value: String! } # 匹配mongoose模型中values数组的元素结构 type ValueEntry { value: Number! timestamp: Date! } type Metric { _id: ID name: String labels: [Label!] values: [ValueEntry!] } type Auth { token: ID user: User } type Query { user: User userById(userId: ID): User metric(metricId: ID): Metric metrics: [Metric]! } type Mutation { addUser( firstName: String! lastName: String! email: String! password: String! ): Auth updateUser(firstName: String, lastName: String, email: String): User login(email: String!, password: String!): Auth addMetric( name: String! labels: [Label!] values: [ValueEntry!] ): Metric } `; module.exports = typeDefs;
原因说明
GraphQL的类型系统要求数组必须明确指定元素的完整类型,你之前的写法混淆了对象结构定义和数组类型声明。通过新增嵌套类型,既完美匹配了mongoose模型里的数组对象结构,又符合GraphQL的语法规则,就能彻底解决这个语法错误。
内容的提问来源于stack exchange,提问作者Justin Connors
相关产品推荐
相关产品推荐

