You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

express-graphql执行createFriend mutation报错Cannot read property 'input' of undefined

问题解决方法

错误原因

你遇到的两个报错分别对应两个不同的问题:

  1. 第一个Cannot read property 'input' of undefined报错,根源是resolver(解析器)的参数位置用错了
  2. 第二个语法报错,是因为你修改后的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:24:03