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

GraphQL Mutation传入参数始终为undefined,该如何解决?

GraphQL Mutation参数undefined问题解决

我正在学习GraphQL,目前无法让Mutation功能正常工作,对线上示例感到困惑。以下是我编写的基于Express的GraphQL服务代码:

import express from 'express'
import cors from 'cors'
import { graphqlHTTP } from 'express-graphql'
import { makeExecutableSchema } from '@graphql-tools/schema'

const app = express()
const port = 4000

// In-memory data store
const data = {
  warriors: [
    { id: '001', name: 'Jaime' },
    { id: '002', name: 'Jorah' },
  ],
}

// Schema
const typeDefs = `
type Warrior {
  id: ID!
  name: String!
}

type Query {
  warriors: [Warrior]
}

type Mutation {
  addUser(name: String!): Warrior!
}
`

// Resolver for warriors
const resolvers = {
  Query: {
    warriors: (obj, args, context) => context.warriors,
  },
  Mutation: {
    //addUser: (parent: unknown, args: {name: String}) => {
    addUser: (name) => {
      console.log('------ 1 ----------');
      const id = String(data.warriors.length + 1);
      const warrior = {id, name};
      console.dir(warrior);
      console.log('------ 3 ----------');
      data.warriors.push(warrior);
      return data.warriros;
    },
  },
}

const executableSchema = makeExecutableSchema({
  typeDefs,
  resolvers,
})

app.use(cors())
app.use(express.json())
app.use(express.urlencoded({ extended: true }))

// Entrypoint
app.use(
  '/graphql',
  graphqlHTTP({
    schema: executableSchema,
    context: data,
    graphiql: true,
  })
)

app.listen(port, () => {
  console.log(`Running a server at http://localhost:${port}`)
})

我在http://localhost:4000/graphql的GraphiQL中执行如下Mutation语句:

mutation {
  addUser(name: "ccc") {
   id   
  }
}

但传入的name参数始终为undefined,请问该如何解决?


正确的Resolver代码

// Resolver for warriors
const resolvers = {
  Query: {
    warriors: (obj, args, context) => context.warriors,
  },
  Mutation: {
    addUser: (_, {name}) => {
      const id = String(data.warriors.length + 1);
      const warrior = {id, name};
      data.warriors.push(warrior);
      return warrior;
    },
  },
}

错误原因说明

  1. Resolver参数使用错误:GraphQL的resolver函数固定接收四个参数,顺序为(parent, args, context, info)。你直接将第一个参数当作name,但第一个参数是父类型对象(Mutation操作无父对象,通常用_占位),请求参数需要从第二个参数args中解构获取。
  2. 返回值错误:原代码中返回data.warriros存在拼写错误(应为warriors),且根据Schema定义,addUser需要返回单个Warrior对象,因此应返回新创建的warrior实例。

内容的提问来源于stack exchange,提问作者user3552178

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:06:26