express-graphql执行createFriend mutation报错Cannot read property 'input' of undefined
问题解决方法
错误原因
你遇到的两个报错分别对应两个不同的问题:
- 第一个
Cannot read property 'input' of undefined报错,根源是resolver(解析器)的参数位置用错了 - 第二个语法报错,是因为你修改后的mutation写法不符合GraphQL语法规范,你最开始写的mutation语法是正确的,不需要修改
Resolver参数规则说明
GraphQL的解析器函数固定按顺序接收4个参数:
- 第1位:父级字段的返回值,顶级Query/Mutation的该参数默认为空
- 第2位:客户端请求传入的所有参数对象,你需要的
input、id都存在这个对象里 - 第3位:上下文对象
- 第4位:查询的AST信息
你之前的代码直接从第1位参数解构取值,自然拿不到对应属性,触发空值报错。
修复步骤
只需要修改resolvers.js文件中的解析器参数即可,其余代码不需要改动:
// resolver map export const resolvers = { Query: { // 从第二个参数(args)中解构id,_是惯例写法代表无需使用的参数 getFriend: (_, { id }) => { return new Friend(id, friendDatabase[id]); }, }, Mutation: { // 从第二个参数(args)中解构input createFriend: (_, { input }) => { let id = require('crypto').randomBytes(10).toString('hex'); friendDatabase[id] = input; return new Friend(id, input); }, }, };
修改完成后重启服务,使用你最开始的mutation语句发起请求即可正常运行。
内容的提问来源于stack exchange,提问作者cliqer
相关产品推荐
相关产品推荐

