Egg 项目怎么连接 MySQL 实现增删改查接口?

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: Egg 项目怎么连接 MySQL 实现增删改查接口?

egg-mysql 插件配置


1、安装插件 egg-mysql

npm install egg-mysql



dafb6b6e87524a14a2915405bf3e3e4c.png


配置参考:https://github.com/eggjs/egg-mysql


6b0a0f15f57d455a97e3e6bddf90b51a.png



2、配置 config/plugin.js

'use strict';
/** @type Egg.EggPlugin */
module.exports = {
  // had enabled by egg
  // static: {
  //   enable: true,
  // }
  ejs: {
    enable: true,
    package: 'egg-view-ejs'
  },
  mysql: {
    enable: true,
    package: 'egg-mysql'
  }
};



3、配置 config/config.default.js

将我们本地的数据库配置上去

/* eslint valid-jsdoc: "off" */
'use strict';
/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = {};
  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1639205546588_1305';
  // add your middleware config here
  config.middleware = [];
  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
  };
  config.view = {
    mapping: {'.html': 'ejs'}  // 左边写成.html后缀,会自动渲染.html文件
  };
  config.security = {
    csrf: {
      enable: false,
      ignoreJSON: true
    },
    domainWhiteList: [ '*' ], // 配置白名单
  };
  config.mysql = {
    // 单数据库信息配置
    client: {
      // host
      host: 'localhost',
      // 端口号
      port: '3306',
      // 用户名
      user: 'root',
      // 密码
      password: 'kaimo313', // 初始化密码,没设置的可以不写
      // 数据库名
      database: 'test', // 新建的数据库名称
    },
    // 是否加载到 app 上,默认开启
    app: true,
    // 是否加载到 agent 上,默认关闭
    agent: false,
  };
  return {
    ...config,
    ...userConfig,
  };
};


egg 连接 mysql实现增删改查


1、CRUD user guide

我们先看一下文档是怎么样处理 CRUD 的。


Create

// insert
const result = yield app.mysql.insert('posts', { title: 'Hello World' });
const insertSuccess = result.affectedRows === 1;


Read

// get
const post = yield app.mysql.get('posts', { id: 12 });
// query
const results = yield app.mysql.select('posts',{
  where: { status: 'draft' },
  orders: [['created_at','desc'], ['id','desc']],
  limit: 10,
  offset: 0
});


Update

// update by primary key ID, and refresh
const row = {
  id: 123,
  name: 'fengmk2',
  otherField: 'other field value',
  modifiedAt: app.mysql.literals.now, // `now()` on db server
};
const result = yield app.mysql.update('posts', row);
const updateSuccess = result.affectedRows === 1;


Delete

const result = yield app.mysql.delete('table-name', {
  name: 'fengmk2'
});




2、查询接口 /user 实现

2.1 router 层

router.get('/user', controller.home.user);



2.2 control 层

async user() {
  const { ctx } = this;
  const userData = await ctx.service.home.user();
  ctx.body = userData;
}



2.3 service 层

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


结果如下:

a662ccbb491f4bd98d25d2549f80a5f5.png



3、新增接口 /add_user 实现

3.1 router 层

router.post('/add_user', controller.home.add_user);


3.2 control 层

async add_user() {
  const { ctx } = this;
  const { name } = ctx.request.body;
  try {
    const result = await ctx.service.home.add_user(name);
    ctx.body = {
      status: 200,
      desc: '新增成功',
      data: null
    }
  } catch (error) {
    ctx.body = {
      status: 500,
      desc: '新增失败',
      data: null
    }
  }
}


3.3 service 层

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


我用 postman 发送了三次新增

4ee9d194ae34447ba10c3acedea08d3f.png



刷新数据库我们发现多了三条数据。


62b0ee56db354d4cbd34852200f35d32.png




4、更新接口 /update_user 实现

4.1 router 层

router.post('/update_user', controller.home.update_user);



4.2 control 层

async update_user() {
  const { ctx } = this;
  const {id, name} = ctx.request.body;
  try {
    const result = await ctx.service.home.update_user(id, name);
    ctx.body = {
      status: 200,
      desc: '更新成功',
      data: null
    }
  } catch (error) {
    ctx.body = {
      status: 500,
      desc: '更新失败',
      data: null
    }
  }
}



4.3 service 层

async update_user(id, name) {
  const { ctx, app } = this;
  try {
    // 给 list 表,更新一条数据
    const result = await app.mysql.update('list', {name}, {
      where: { id }
    });
    return result;
  } catch (error) {
    console.log(error);
    return null;
  }
}



更新 id 为 2 的数据:



a0f86558f5b34e45b1ab0c1f27fdc53b.png



5、更新接口 /delete_user 实现


5.1 router 层

router.post('/delete_user', controller.home.delete_user);



5.2 control 层

async delete_user() {
  const { ctx } = this;
  const {id} = ctx.request.body;
  try {
    const result = await ctx.service.home.delete_user(id);
    ctx.body = {
      status: 200,
      desc: '删除成功',
      data: null
    }
  } catch (error) {
    ctx.body = {
      status: 500,
      desc: '删除失败',
      data: null
    }
  }
}



5.3 service 层

async delete_user(id) {
  const { ctx, app } = this;
  try {
    // 给 list 表,删除一条数据
    const result = await app.mysql.delete('list', {id});
    return result;
  } catch (error) {
    console.log(error);
    return null;
  }
}



8509ee3575ed40c9bb2ac50fde8f39a7.png




a77ddbb5eeb6407fa2195ac95e2ba62f.png


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
6月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
282 13
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
1528 11
|
6月前
|
SQL 关系型数据库 MySQL
排除通过IP访问MySQL时出现的连接错误问题
以上步骤涵盖了大多数遇到远程连接 MySQL 数据库时出现故障情形下所需采取措施,在执行每个步骤后都应该重新尝试建立链接以验证是否已经解决问题,在多数情形下按照以上顺序执行将能够有效地排除并修复大多数基本链接相关故障。
462 3
|
6月前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
660 11
|
7月前
|
存储 关系型数据库 MySQL
修复.net Framework4.x连接MYSQL时遇到utf8mb3字符集不支持错误方案。
通过上述步骤大多数情况下能够解决由于UTF-encoding相关错误所带来影响,在实施过程当中要注意备份重要信息以防止意外发生造成无法挽回损失,并且逐一排查确认具体原因以采取针对性措施解除障碍。
417 12
|
6月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
470 158
|
6月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
6月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1124 152
|
6月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
861 156
|
6月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
471 156

推荐镜像

更多