GraphQL(5):使用Mutations修改数据

GraphQL中的使用Mutation查询,下面介绍详细操作,新建一个mutation.js文件。

1 定义schema

1.1 定义模型对象

(1)定义输入模型

复制代码
    input AccountInput {
        name: String
        age: Int
        sex: String
        department: String
    }

(2)定义输出模型

复制代码
    type Account {
        name: String
        age: Int
        sex: String
        department: String
    }

1.2 定义查询操作

定义了一个查询操作,返回所有用户数组

复制代码
    type Query {
        accounts: [Account]
    }

1.3 定义变更操作

复制代码
    type Mutation {
        createAccount(input: AccountInput): Account
        updateAccount(id: ID!, input: AccountInput): Account
    }

2 实现处理器

2.1 定义查询处理函数

复制代码
    accounts() {
        var arr = [];
        for(const key in fakeDb) {
            arr.push(fakeDb[key])
        }
        return arr;
    },

2.2 定义变更处理函数

复制代码
    createAccount({ input }) {
        // 相当于数据库的保存
        fakeDb[input.name] = input;
        // 返回保存结果
        return fakeDb[input.name];
    },

    updateAccount({ id, input }) {
        // 相当于数据库的更新
        const updatedAccount = Object.assign({}, fakeDb[id], input);
        fakeDb[id] = updatedAccount;
        // 返回保存结果
        return updatedAccount;
    }

3 完整代码

复制代码
const express = require('express');
const {buildSchema} = require('graphql');
const grapqlHTTP = require('express-graphql').graphqlHTTP;

// 定义schema,查询和类型, mutation
const schema = buildSchema(`
    input AccountInput {
        name: String
        age: Int
        sex: String
        department: String
    }
    type Account {
        name: String
        age: Int
        sex: String
        department: String
    }
    type Mutation {
        createAccount(input: AccountInput): Account
        updateAccount(id: ID!, input: AccountInput): Account
    }
    type Query {
        accounts: [Account]
    }
`)

const fakeDb = {};

// 定义查询对应的处理器
const root = {
    accounts() {
        var arr = [];
        for(const key in fakeDb) {
            arr.push(fakeDb[key])
        }
        return arr;
    },
    createAccount({ input }) {
        // 相当于数据库的保存
        fakeDb[input.name] = input;
        // 返回保存结果
        return fakeDb[input.name];
    },

    updateAccount({ id, input }) {
        // 相当于数据库的更新
        const updatedAccount = Object.assign({}, fakeDb[id], input);
        fakeDb[id] = updatedAccount;
        // 返回保存结果
        return updatedAccount;
    }
}

const app = express();

app.use('/graphql', grapqlHTTP({
    schema: schema,
    rootValue: root,
    graphiql: true
}))

app.listen(3000);

4 实例测试

启动程序

复制代码
node mutation.js

访问http://localhost:3000/graphql

测试新增功能

测试修改功能

测试查询功能

相关推荐
0xDevNull2 分钟前
Java实现Redis延迟队列:从原理到高可用架构
java·开发语言·后端
糖炒栗子03264 分钟前
Go 语言环境搭建与版本管理指南 (2026)
开发语言·后端·golang
恼书:-(空寄12 分钟前
Spring 事务失效的 8 大场景 + 原因 + 解决方案
java·后端·spring
我是若尘14 分钟前
我的需求代码被主干 revert 了,接下来我该怎么操作?
前端·后端·代码规范
dweizhao29 分钟前
这份AI报告,把美股干崩了
后端
高梦轩34 分钟前
MySQL 数据库备份与恢复
数据库·oracle
JOEH602 小时前
Java 后端开发中的内存泄漏问题:90% 开发者都会踩的 5 个坑
后端
_野猪佩奇_牛马版2 小时前
多智能体协作 - 使用 LangGraph 子图实现
后端
JOEH602 小时前
为什么你的数据库连接总超时?99% 的 Java 程序员都踩过这 5 个坑
后端
后端不背锅2 小时前
对外接口设计完全指南:安全、高性能、可演进
后端