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

如何在graphql-yoga中为Mutation编写Resolver?

解决GraphQL-Yoga中Mutation Resolver的编写问题

我来帮你搞定这个Mutation Resolver的问题!从你的代码和报错来看,核心问题是Mutation下的createUser还没有实现对应的处理逻辑,而且Query部分的users返回的是类型而不是实际数据,这也可能导致一些问题。下面一步步来修复:

第一步:准备模拟数据源

因为你还没有接入数据库,我们先定义一个临时数组来存储用户数据,模拟数据库的作用:

// 模拟用户存储,相当于临时数据库
let users = [
  { id: '1', name: 'Alice' },
  { id: '2', name: 'Bob' }
];

第二步:完善Query的Resolver

先把Query部分的逻辑补全,确保能正确返回用户列表和单个用户:

Query: {
  users: () => users, // 返回模拟的用户数组
  user: (parent, args) => users.find(user => user.id === args.id) // 根据id查找单个用户
}

第三步:编写Mutation的createUser Resolver

现在重点实现createUser的逻辑,它需要接收前端传来的name参数,生成新用户并添加到数据源,最后返回新创建的用户:

Mutation: {
  createUser: (parent, args) => {
    // 生成唯一ID(这里用时间戳简单实现,生产环境可以用uuid库)
    const newUser = {
      id: Date.now().toString(),
      name: args.name
    };
    // 将新用户添加到数组
    users.push(newUser);
    // 返回新创建的用户(要和typeDefs中定义的User结构一致)
    return newUser;
  }
}

完整代码示例

把所有部分整合起来,完整代码如下:

const { GraphQLServer } = require('graphql-yoga')

// 模拟用户存储
let users = [
  { id: '1', name: 'Alice' },
  { id: '2', name: 'Bob' }
];

const typeDefs = `
type Query {
  users: [User!]!
  user(id: ID!): User
}
type Mutation {
  createUser(name: String!): User!
}
type User {
  id: ID!
  name: String!
}
`

const resolvers = {
  Query: {
    users: () => users,
    user: (parent, args) => users.find(user => user.id === args.id)
  },
  Mutation: {
    createUser: (parent, args) => {
      const newUser = {
        id: Date.now().toString(),
        name: args.name
      };
      users.push(newUser);
      return newUser;
    }
  }
}

const server = new GraphQLServer({ typeDefs, resolvers })
server.start(() => console.log(`Server is running on http://localhost:4000`))

测试Mutation

启动服务器后,在GraphQL Playground中运行以下突变请求:

mutation {
  createUser(name: "Yosua") {
    id
    name
  }
}

你会得到新创建用户的id和name,再运行query { users }就能看到这个新用户已经被添加到列表里了。

报错原因说明

你之前的报错是因为GraphQL找不到createUser对应的Resolver函数,每个在typeDefs中定义的Query和Mutation字段,都必须在resolvers对象中对应实现处理逻辑,否则就会抛出"Cannot return null for non-nullable field Mutation.createUser"这类错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:55:44