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

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

1 定义schema

1.1 定义模型对象

(1)定义输入模型

    input AccountInput {name: Stringage: Intsex: Stringdepartment: String}

(2)定义输出模型

    type Account {name: Stringage: Intsex: Stringdepartment: String}

1.2 定义查询操作

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

    type Query {accounts: [Account]}

1.3 定义变更操作

    type Mutation {createAccount(input: AccountInput): AccountupdateAccount(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: Stringage: Intsex: Stringdepartment: String}type Account {name: Stringage: Intsex: Stringdepartment: String}type Mutation {createAccount(input: AccountInput): AccountupdateAccount(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

测试新增功能

测试修改功能

测试查询功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻防世界---misc---Ditf

1、题目描述,下载附件,是一张图片 2、打开图片,发现宽高不一样,猜测可能是需要修改宽高,用winhex分析,没有发现奇怪的地方 3、用kali中的binwalk命令,分析图片,发现有个压缩包&#…

基于SpringBoot+Vue二手家电管理平台设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

【Python基础知识】安装第三方库的两种方式——在线与离线

在线 电脑有网络的情况下,直接换镜像,然后pip install就行。 离线 我遇到了一种情况是,学校里的服务器连不上网,导致没法在线pip install,所以只能通过离线的方式下载。步骤如下: 找一台有网络的电脑&a…

va_start和va_end使用介绍

一 概述 采用C语言编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数。但在某些情况下希望函数的参数个数可以根据需要确定。典型的例子有大家熟悉的函数printf()、scanf()和系统调用execl()等。那么它们是怎…

Python语言分为:深度解析Python的四大维度、五大特色、六大应用场景及七大发展趋势

Python语言分为:深度解析Python的四大维度、五大特色、六大应用场景及七大发展趋势 Python,作为当今最受欢迎的编程语言之一,其广泛的应用领域和独特的语言特性使其成为编程领域的明星。本文将从四个方面、五个方面、六个方面和七个方面&…

基于jeecgboot-vue3的Flowable流程-待办任务(一)

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、ToDo.data.ts的数据信息如下 import {BasicColumn} from //components/Table; import {FormSchema} from //components/Table; import { rules} from //utils/helper/validator; impor…

Hyper-V 安装 CentOS Stream 9【图文教程】

文章目录 准备工作:选择 CentOS 版本第 1 步:下载官方下载阿里云镜像下载第 2 步:创建虚拟机第 3 步:安装虚拟机修改安全配置安装虚拟机配置网路第 4 步:使用 SSH 连接查看 IP 地址使用 SSH 连接参考🚀 目标:通过 Hyper-V 在本地搭建一个 CentOS 虚拟机。 准备工作:选…

c# iText使用

引入包 用nuget安装itext和itext.bouncy-castle-adapter包: 创建pdf string path "a.pdf"; PdfWriter writer new PdfWriter(path); PdfDocument pdfDoc new PdfDocument(writer); var docnew Document(pdfDoc); Paragraph p new Paragraph(&quo…

Python03:python代码初体验2

1、变量命名规范 1)字母(Unicode字符)、数字、下划线,不能使用特殊字符,数字不能开头 2)变量名是区分大小写的(大小写敏感,x和X是两个不同的变量名) 3)不能使…

【打印功能】js简单实现表格样式的数据打印,按样式打印出来

效果图 代码部分&#xff0c;简单三步 1&#xff0c;html部分&#xff1a;写一个表格&#xff0c;然后数据填进去 <div id"printable-area" v-show"false"><div><div style"text-align: center;height: 40px;line-height: 40px;font…

语音深度鉴伪识别项目实战:基于深度学习的语音深度鉴伪识别算法模型(三)音频去噪算法大全+Python源码应用

前言 深度学习技术在当今技术市场上面尚有余力和开发空间的&#xff0c;主流落地领域主要有&#xff1a;视觉&#xff0c;听觉&#xff0c;AIGC这三大板块。 目前视觉板块的框架和主流技术在我上一篇基于Yolov7-LPRNet的动态车牌目标识别算法模型已有较为详细的解说。与AIGC相…

IDEA快捷生成左边变量,取消final关键字

一&#xff1a;问题 如图&#xff1a;每次使用CtrlALtV或.var自动生成左边变量都会有final关键字&#xff0c;然后需要删除很麻烦 二&#xff1a;解决 以下步骤设置取消生成final关键字 1.先 生成变量&#xff1a;我是使用.var自动生成左边变量 2.使用快捷键ALtshiftO或者点…

安全测试 之 安全漏洞: ClickHiJacking

1. ClickHiJacking 定义 点击劫持&#xff08;Click Jacking&#xff09;是一种视觉上的欺骗手段&#xff0c;攻击者通过使用一个透明的iframe&#xff0c;覆盖在一个网页上&#xff0c;然后诱使用户在该页面上进行操作&#xff0c;通过调整iframe页面的位置&#xff0c;可以使…

停止在你的数据库中使用UUID

在数据库中唯一标识行的最常见方法之一是使用UUID字段。然而&#xff0c;这种方法带来了需要注意的性能问题。 本文将讨论在使用UUID作为数据库表中的键时可能出现的两个性能问题。 我们直接进入正题&#xff01; 什么是UUID&#xff1f; UUID代表通用唯一标识符&#xff08;Un…

做个简单的电脑桌面窗体插件,通过.exe执行命令就可以执行

做个简单的电脑桌面窗体插件&#xff0c;通过.exe执行命令就可以执行 步骤一&#xff1a;安装所需的库步骤二&#xff1a;创建一个简单的PyQt5应用步骤三&#xff1a;保存并运行步骤四&#xff1a;打包为可执行文件总结 我们可以使用Python和PyQt5来创建一个简单的桌面窗体应用…

SwiftUI中ScrollViewReader的使用(自动滚动ScrollView)

ScrollViewReader是我最喜欢的SwiftUI新版本的新功能之一。在iOS 14发布之前&#xff0c;控制ScrollView的滚动位置并不容易。如果希望滚动视图滚动到特定位置&#xff0c;我们必须找到自己的解决方案。 使用ScrollViewReader&#xff0c;只需几行代码&#xff0c;就可以使滚动…

Linux学习—Linux环境下的网络设置

在当今的数字化时代&#xff0c;网络配置是任何系统管理员和开发者必须掌握的技能之一。Linux操作系统以其灵活性和强大的网络功能而闻名&#xff0c;本文将带你深入了解Linux环境下的网络配置&#xff0c;并通过代码示例展示如何进行基本的网络设置。 Linux网络基础 Linux网…

使用opencv在图像上画带刻度线的十字线,以图像中心点为0点

使用OpenCV在图像上绘制带刻度线的十字线,可以通过以下步骤实现。我们将首先找到图像的中心点,然后绘制水平和垂直线,并在这些线的适当位置绘制刻度线。以下是详细的C++代码示例: #include<opencv2\opencv.hpp> //画十字标注线带刻度线,以图像中心点为0点 void Dra…

SD NAND(贴片式TF卡)坏块管理技术问答

Q1:什么是NAND的块(Block))? 每个Nand包含一个或多个Chip。Chip是可以独立执行命令并上报状态的最小单元。 每个Chip包含一个或多个plane。不同的plane间可以并发操作&#xff0c;不过有一些限制。 每个plane包含多block&#xff0c;block是最小擦除单元&#xff08;擦除后为…

一文了解如何安全有效的进行PB级别的大数据迁移

在这个信息量爆炸的时代&#xff0c;处理PB级别的数据转移已成为常态&#xff0c;但对企业而言&#xff0c;这仍然是一个充满挑战的任务。今天&#xff0c;我们来探讨一下这个话题&#xff0c;看看在进行PB级数据转移时&#xff0c;需要留意哪些事项&#xff0c;可能会遇到哪些…