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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
8 2
|
5天前
|
JavaScript 前端开发 关系型数据库
Node.js 连接 MySQL
Node.js 连接 MySQL
18 5
|
6天前
|
关系型数据库 MySQL Java
|
1天前
|
关系型数据库 MySQL Java
连接 MySQL 数据库使用 JDBC
连接 MySQL 数据库使用 JDBC
5 0
|
6天前
|
SQL 关系型数据库 MySQL
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
|
8天前
|
SQL 关系型数据库 MySQL
MySQL管理与连接
MySQL管理与连接
|
15天前
|
NoSQL 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之连接RDS、Redis等数据库时,是否需要通过安全组来控制访问权限
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2天前
|
存储 关系型数据库 MySQL
关系型数据库MySQL的MyISAM
【6月更文挑战第17天】
18 11
|
3天前
|
存储 关系型数据库 MySQL
|
3天前
|
SQL 关系型数据库 MySQL