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

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Egg 项目怎么连接 MySQL 实现增删改查接口?相关的知识,希望对你有一定的参考价值。

egg-mysql 插件配置

1、安装插件 egg-mysql

npm install egg-mysql

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

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;
  

结果如下:

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 发送了三次新增

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

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 的数据:


数据库刷新:

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;
  

删除 id 为 3 的数据

数据库刷新:

以上是关于Egg 项目怎么连接 MySQL 实现增删改查接口?的主要内容,如果未能解决你的问题,请参考以下文章

java连接sql数据库,怎么实现增删改查?

java连接sql数据库。实现增删改查怎么写。谁有实例

怎么使用php连接myspl数据库,最好是能给一个实现增删改查的小项目

Go使用Gin+mysql实现增删改查

Python3-Flask--mysql的简单增删改查

Java用jdbc连接实现对MySQL增删改查操作