使用Egg调用mysql实现增删改查接口操作

news2024/11/24 22:35:51

市场上数据库可视化工具很多,笔者更多时间使用的是 Navicat ,但是因为它是收费的,一些伙伴可能没发使用,所以笔者在这里推荐一款 工具 名为: DBevaer,它所展现出来的能力,与navicat 类似,并且还是免费开源的。本章节,各位伙伴就自行下载 DBevaer 与笔者一起来进行。由于工具不同,所以某些地方可能不一定笔者的正确。所以大家对于可视化工具这里,做以参考。

下载链接:Download | DBeaver Community

链接本地数据库

上章节,笔者在最后已经连接到了数据库。这里需要给大家说明的是,如果大家的数据库没有修改端口,那么默认的数据库端口一定会是3306,所以大家在下载完工具后可以打开软件,然后通过新建连接,输入主机名(上节课我们默认是localhost),端口号(默认3306),以及用户名(root),密码(上节课所设置)

修改完后点击确定。

我们再次双击即可链接到本地的服务器。如果这里出错,有可能是因为没有开启mysql。window下 大家可以通过cd 到mysql解压目录的bin目录下,通过命令行 : net start mysql 来启动本地的mysql

然后我们在当前本地库中选择对应的数据库即可。

这时候我们的可视化工具就正式连接到了mysql。

下来我们可以通过新建一个数据库,让我们的Egg项目成功连接上。并作一些简单的操作。

Egg链接Mysql

首先我们新建一个数据库,用于后续的操作演示。

 

新建一个test数据库如下:

 

然后在当前tset 数据库中 我们新建一张数据表

 

表名为list,表中有一个字段 id,int 类型,我们设置它不可空,且自增,并且设置其主键

 

然后再新增一个字段 name,类型为 varchar。

最后保存刷新表,并且默认给它两字段赋值, 0 与 Nick

 

Egg 接入数据库实现查询接口

完成数据库的基础数据后,我们打开之前的项目。安装插件 egg-mysql

npm install egg-mysql

安装完成后打开目录 config/plugin.js 添加插件配置

module.exports = {
    ejs:{
        ...
    },
        mysql:{
            enable: true,
            package: 'egg-mysql'
        }
}

然后再配置 config/config.default.js 初始化配置

 config.mysql = {
    // 单数据库信息配置
    client: {
      // host
      host: 'localhost',
      // 端口号
      port: '3306',
      // 用户名
      user: 'root',
      // 密码
      password: '294857697182', // 初始化密码,没设置的可以不写
      // 数据库名
      database: 'test', // 我们新建的数据库名称
    },
    // 是否加载到 app 上,默认开启
    app: true,
    // 是否加载到 agent 上,默认关闭
    agent: false,
  };

下来我们则需要修改 service/home.js 来获取数据库

const Service = require('egg').Service;
​
class HomeService extends Service {
  async user() {
    const { ctx, app } = this;
    const QUERY_STR = 'id, name';
    let sql = `select ${QUERY_STR} from list`; // 获取 id 的 sql 语句
    try {
      const result = await app.mysql.query(sql); // mysql 实例已经挂载到 app 对象下,可以通过 app.mysql 获取到。
      return result;
    } catch (error) {
      console.log(error);
      return null;
    }
  }
}
module.exports = HomeService;

最后将 controller 与 router 进行修改.

// controller/home.js
​
async user () {
    const {ctx} = this;
    const result = await ctx.service.user();
    ctx.body = result
}
// app/router.js
​
router.get('/user', controller.home.user);

全部修改完后,我们启动项目,打开 http://127.0.0.1:7001/user 即可访问到当前的user接口。

 

页面上曾经查询出来了我们在数据库的对应的数据。

我们也可以在数据库中再次新增一条数据然后刷新下页面查看。

 

页面上查询的值也会跟着变化。

 

所以数据库的原理跟之前刚开始的适合说的一样,它是一个存储数据的东西,而我们在接触后台,一定是绕不开数据库的。毕竟接口党 写接口就是为了调用或者处理数据的。

我们通过调用 get 的 /user 接口,获取到了list表的 id 跟name 两个字段值,并且以数组的方式进行返回。

Egg 实现新增接口

上述实现了查询接口,下来我们新增一个新增接口, 首先在 service/home.js 中 新建一个 service 处理方法 名为 addUser

​
async addUser (name) {
    const { ctx,app } = this;
    try {
        const result = await app.mysql.insert('list', { name }); // 给list表新增一条数据
       return result;
    }catch(error) {
        console.log(error);
        return null;
    }
}

修改完service 之后,我们则需要给响应请求的controller 也增加对应的 addUser方法。

async addUser () {
    const {ctx} = this;
    const {name} = ctx.request.body;
    try {
        const result = await ctx.service.addUser(name);
        ctx.body = 
            code: 200,
            mag: '添加成功',
            data: null
    }catch (error) {
        ctx.body = {
           code: 500,
            msg: '添加失败',
            data: null
        }
    }
}

同样,完成之后,我们抛router。

// app/router.js
​
router.post('/add_user', controller.home.aduser)

启用 postman 进行数据接口请求

 

返回添加成功,再看数据表。

 

也已经插入。

当我们再次请求/user 接口的适合,页面上就变成了三条数据

编辑接口

在编写编辑接口之前,同学们可以想象下自己的之前调用后台接口的时候是怎样的呢,没错。是需要传递主键与修改后的数据,我们需要确定修改的是哪个值的某个字段。

所以编辑接口肯定是至少需要两个字段,一个是id 用来查找是哪个值。name 是需要编辑的最新的值。

我们来尝试编写

首先还是先写 service

//service/home.js
​
async editUser (id, name) {
    const { ctx, app } = this;
    try {
        const result = await app.mysql.update('list', { name }, {
            where: {
                id
            }
        });
        return result
    }catch (error) {
        console.log(error)
        return null;
    }
}

// 其次编写 controller

// controller/homs.js
async editUser () {
    const { ctx } = this;
    const { id, name } = ctx.request.body;
    try{ 
        const result = await ctx.service.home.editUser(id, name);
        ctx.body = {
            code: 200,
            msg: '修改成功',
            data: null
        }
    }catch(error) {
       ctx.body = {
           code: 500,
           msg: '修改失败',
           data: null
       }
    }
}

最后老样子再加上 router

router.put('/edit_user', app.controller.home.editUser);

遵循以上后,我们可以再次打开postman 进行调用。下面是老数据

 

我调用postman之后进行修改

 

然后调用 /user 查询接口查询最新数据。

 

已然修改结束。

删除接口

删除接口其实有了上面的查询、新增与修改,已经很好做了。

为了便于区分,删除接口我们使用 delete 请求。

service如下

async delUser () {
    const { app } = this;
    try {
        const result = app.mysql.delete('list', {
            id,
        })
    }catch (error) {
        return null;
    }
}

controller 如下:

async delUser() {
    const { ctx } = this;
    const { id } ctx.query;
    try {
        const result = ctx.service.home.delUser(id);
        ctx.body = {
            code: 200,
            msg: '成功',
            data: true
        }
    }catch(error){
        ctx.body = {
            code: 500,
            msg: '失败',
            data: false
        }
    }
}

最后老样子别忘记 router

router.delete('/del_user', Controller.home.delUser);

页面上数据也自然随之变化。

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

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

相关文章

玩RTOS这么久,一问原子操作,蒙了~

已剪辑自: https://mp.weixin.qq.com/s/kvxcOHT-xHtMAjQqJu7Y2g [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C3f9Rrei-1668695258073)(https://res.wx.qq.com/mmbizappmsg/zh_CN/htmledition/js/images/icon/audio/icon_qqmusic_source6201b5.sv…

代码随想录——钥匙和房间(图论)

题目 有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。 在形式上,对于每个房间 i 都有一个钥匙列表 rooms[…

tft lcd spi 驱动

tft lcd spi 驱动参考驱动uc1701SPI设备树配置背光控制IO设备树配置SPI控制引脚配置参考驱动uc1701 linux-4.1.15-imx6ul/drivers/staging/fbtftSPI设备树配置 根据原理图修改对应引脚 linux-3.10/arch/arm/boot/dts/sun8iw11p1-pinctrl.dtsi 蔽掉引脚冲突功能 linux-3.10/ar…

如何注册公司网站?【注册公司网站】

公司网站是很多公司的必备品,哪怕公司并不依赖线上业务,也会有自己的公司网站。随着互联网的发展成熟,其实现在注册公司网站基本上都是比较简单的,那么如何注册公司网站呢?下面给大家说一说。 一、注册公司网站前准备…

英伟达发布526.98 WHQL 显卡驱动,支持RTX 4080,三款即将上线游戏

11月16日,英伟达发布了526.98 WHQL 新驱动,支持最新发布的RTX 4080显卡。 新驱动为《蜘蛛侠:迈尔斯莫拉莱斯》、《战锤40k:暗潮》和《魔兽世界:巨龙时代》提供支持。此外,还支持《怪物猎人崛起》的DLAA更新和WRC世代-国际汽联WRC…

【FFmpeg】ffmpeg+nginx-rtmp实现视频流转发

1.应用场景 目前的摄像头厂家能提供出来的视频流格式有限,且chrome已经禁止了对flash的支持,导致像硬盘录像机这种只能提供rtsp格式流地址的摄像头无法接入Web应用,所以不得不对视频的流地址进行分发,通过代码对流地址中的数据进…

数仓开发之DWD层(三)

(附:由于篇幅原因,这里就不在展示代码了,直接告诉大家思路) 目录 五:交易域订单预处理表 5.1 主要任务 5.2 思路分析 5.3 图解 六:交易域下单事务事实表 6.1 主要任务: 6.2 …

泰克AFG31152函数信号发生器Tektronix AFG31152介绍

泰克AFG31152函数信号发生器Tektronix AFG31152 AFG31152 是 Tektronix 的 50 MHz 任意函数发生器。 特征: 的 InstaView™ 技术使工程师能够实时查看被测设备 (DUT) 的实际波形,而无需示波器和探头,从而消除了由阻抗不匹配引起的不确定性…

linux C.UTF-8和en-US.UTF-8语言环境有什么区别?(中文乱码问题)locale命令 centos、ubuntu修改编码集(没搞定!)

文章目录问题背景查看C.UTF-8和en-US.UTF-8语言环境差异关于locale修改编码集centos(没验证)ubuntu问题背景 我在ubuntu16.04虚拟机和英伟达盒子ubuntu18.04上分别部署了ngrest服务 用postman请求,ubuntu16.04虚拟机返回的中文是乱码&#…

软件测试职场焦虑之我对35岁危机的看法

目录 前言 如何理解35岁失业? 本质的原因是什么? 应对35岁失业的策略 总结 前言 这几年关于“35岁失业”的讨论甚嚣尘上,特别是进入疫情时代,身边也越来越多的人开始讨论这个话题。 一方面是疫情带来的巨大变革,…

SpringCloud——微服务介绍+系统架构

目录 1. 微服务介绍 2.系统架构演变 3. 单体应用架构 3.1优点: * 项目架构简单,小型项目的话, 开发成本低* 项目部署在一个节点上, 维护方便 3.2缺点: * 全部功能集成在一个工程中,对于大型项目来讲…

Data Catalog3.0:Modern Metadata for the Modern Data Stack

从2020年开始,在数据领域中,有一个比较流行的术语:The Modern Data Stack(现代数据堆栈),简单理解就是汇集了处理海量数据的最佳工具集。这包括在最好的工具上建立数据基础设施,如用于数据仓库的Snowflake,…

传奇外网架设常见的问题及解决办法-传奇创建人物失败/不开门/PAK显示密码错误/脚本错误

传奇外网架设常见的问题及解决办法-传奇创建人物失败/不开门/PAK显示密码错误/脚本错误 在架设传奇的时候是否有遇到无法创建人物、pak密码错误等一系列情况呢?咱们都知道是架设不对的问题,但是具体是哪部分的问题,很多同学都不清楚&#xff…

JDK与cglib动态代理

JDK动态代理 接口类 public interface Subject {void doSomething(); }接口实现 public class RealSubject implements Subject {Overridepublic void doSomething() {System.out.println("RealSubject do something");} }InvocationHandler类 package daili;imp…

随笔记:计算机基础及进制计数法

随笔记:计算机基础及进制计数法 记录一下最近接触的基本的概念,便于想看的时候随时来翻看一下。 基础理论还是比较重要滴,基础理论还是比较重要滴,基础理论还是比较重要滴 现代计算机是用 0 和 1 来表示信息的,使用的…

6、行为型模式-责任链模式

一、责任链模式描述 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者…

Unity AVPro 使用

AVPro 感觉我写的没多大用处,后面看看文档再完善一些。目前的东西是可以满足一些简单的需求的。 说明 标题名称内容Unity版本Unity 2021 .1.18f1c1AVPro 版本AVPro Video - Ultra Edition 2.5.6IDEVS2022系统版本Win 10 1909撰写日期2022 11月15日晚 需要注意的地…

防孤岛保护装置在光伏行业的应用

安科瑞 华楠 应用场景 防孤岛原理:防孤岛保护装置检测到并网点有逆功率、频率突变、 等异常数据时,即发生孤岛现象时,装置可配合断路器快速切除并网点,使本站与电网侧快速脱离,保证整个电站和相关维护人员的生命安全 …

Go:Signal信号量的简介与实践(优雅的退出)

文章目录简介一、kill与kill9的区别二、实践:优雅的退出小结简介 go中的信号量 有些信号名对应着3个信号值,这是因为这些信号值与平台相关,SIGKILL和SIGSTOP这两个信号既不能被应用程序捕获,也不能被操作系统阻塞或忽略。 一、…

智慧管廊解决方案-最新全套文件

智慧管廊解决方案-最新全套文件一、建设背景二、建设意义三、建设目标四、思路架构综合管廊目前存在的痛点1、安全防范不足2、管理技术落后3、信息孤岛问题4、多头管理问题五、建设方案六、获取 - 智慧管廊全套最新解决方案合集一、建设背景 综合管廊一般是建于城市地下用于容…