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


    市场上数据库可视化工具很多,笔者更多时间使用的是 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 添加插件配置

    1. module.exports = {
    2.    ejs:{
    3.        ...
    4.   },
    5.        mysql:{
    6. enable: true,
    7.            package: 'egg-mysql'
    8.       }
    9. }

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

    1. config.mysql = {
    2.    // 单数据库信息配置
    3.    client: {
    4.      // host
    5.      host: 'localhost',
    6.      // 端口号
    7.      port: '3306',
    8.      // 用户名
    9.      user: 'root',
    10.      // 密码
    11.      password: '294857697182', // 初始化密码,没设置的可以不写
    12.      // 数据库名
    13.      database: 'test', // 我们新建的数据库名称
    14.   },
    15.    // 是否加载到 app 上,默认开启
    16.    app: true,
    17.    // 是否加载到 agent 上,默认关闭
    18.    agent: false,
    19. };

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

    1. const Service = require('egg').Service;
    2. class HomeService extends Service {
    3.  async user() {
    4.    const { ctx, app } = this;
    5.    const QUERY_STR = 'id, name';
    6.    let sql = `select ${QUERY_STR} from list`; // 获取 id 的 sql 语句
    7.    try {
    8.      const result = await app.mysql.query(sql); // mysql 实例已经挂载到 app 对象下,可以通过 app.mysql 获取到。
    9.      return result;
    10.   } catch (error) {
    11.      console.log(error);
    12.      return null;
    13.   }
    14. }
    15. }
    16. module.exports = HomeService;

    最后将 controller 与 router 进行修改.

    1. // controller/home.js
    2. async user () {
    3.    const {ctx} = this;
    4.    const result = await ctx.service.user();
    5.    ctx.body = result
    6. }
    1. // app/router.js
    2. 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

    1. async addUser (name) {
    2.    const { ctx,app } = this;
    3.    try {
    4. const result = await app.mysql.insert('list', { name }); // 给list表新增一条数据
    5.       return result;
    6.   }catch(error) {
    7.        console.log(error);
    8.        return null;
    9.   }
    10. }

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

    1. async addUser () {
    2.    const {ctx} = this;
    3.    const {name} = ctx.request.body;
    4.    try {
    5.        const result = await ctx.service.addUser(name);
    6.        ctx.body =
    7.            code: 200,
    8.            mag: '添加成功',
    9.            data: null
    10.   }catch (error) {
    11.        ctx.body = {
    12.           code: 500,
    13.            msg: '添加失败',
    14.            data: null
    15.       }
    16.   }
    17. }

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

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

    启用 postman 进行数据接口请求

     

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

     

    也已经插入。

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

    编辑接口

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

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

    我们来尝试编写

    首先还是先写 service

    1. //service/home.js
    2. async editUser (id, name) {
    3.    const { ctx, app } = this;
    4.    try {
    5.        const result = await app.mysql.update('list', { name }, {
    6.            where: {
    7.                id
    8.           }
    9.       });
    10.        return result
    11.   }catch (error) {
    12.        console.log(error)
    13.        return null;
    14.   }
    15. }

    // 其次编写 controller

    // controller/homs.js
    
    1. async editUser () {
    2.    const { ctx } = this;
    3.    const { id, name } = ctx.request.body;
    4.    try{
    5. const result = await ctx.service.home.editUser(id, name);
    6.        ctx.body = {
    7.            code: 200,
    8.            msg: '修改成功',
    9.            data: null
    10.       }
    11.   }catch(error) {
    12.       ctx.body = {
    13.           code: 500,
    14.           msg: '修改失败',
    15.           data: null
    16.       }
    17.   }
    18. }

    最后老样子再加上 router

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

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

     

    我调用postman之后进行修改

     

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

     

    已然修改结束。

    删除接口

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

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

    service如下

    1. async delUser () {
    2.    const { app } = this;
    3.    try {
    4.        const result = app.mysql.delete('list', {
    5.            id,
    6.       })
    7.   }catch (error) {
    8.        return null;
    9.   }
    10. }

    controller 如下:

    1. async delUser() {
    2.    const { ctx } = this;
    3.    const { id } ctx.query;
    4.    try {
    5.        const result = ctx.service.home.delUser(id);
    6.        ctx.body = {
    7.            code: 200,
    8.            msg: '成功',
    9.            data: true
    10.       }
    11.   }catch(error){
    12.        ctx.body = {
    13.            code: 500,
    14.            msg: '失败',
    15.            data: false
    16.       }
    17.   }
    18. }

    最后老样子别忘记 router

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

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

  • 相关阅读:
    [附源码]java毕业设计旅游产品销售管理
    如何实现一个IO口读取多个设备信息
    《上海悠悠接口自动化平台》-5.测试计划与定时任务
    这些年写过的花式sql 第2句 统计用户返佣金排名
    深度学习-全连接神经网络-详解梯度下降从BGD到ADAM - [北邮鲁鹏]
    RXJS解决NGZORRO下拉框组件飘逸的问题
    C#/.NET/.NET Core拾遗补漏合集(24年6月更新)
    控制器连接Profinet转Modbus RTU网关与精密数显温控仪通讯配置案例
    Kubeadm安装k8s高可用集群实战
    分享 2022 年最受欢迎的黑科技工具(二)
  • 原文地址:https://blog.csdn.net/qq_31281245/article/details/127910114