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 的数据
在这里插入图片描述
数据库刷新:
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于 Egg.jsMySQL增删改查语句,你可以借助 Egg.js 提供的框架特性和 MySQL 的 npm 包来完成。以下是一些示例代码: 1. 安装依赖: ``` $ npm install egg-mysql --save ``` 2. 配置插件: 在 `config/plugin.js` 中添加以下配置: ``` exports.mysql = { enable: true, package: 'egg-mysql' }; ``` 3. 配置数据库连接: 在 `config/config.default.js` 中添加以下配置(根据你自己的实际情况修改): ``` exports.mysql = { client: { host: 'localhost', port: '3306', user: 'root', password: 'your_password', database: 'your_database' } }; ``` 4. 使用增删改查语句: 在 Controller 或 Service 中使用以下示例代码来执行相应的 SQL 操作。 注意:这里只是示例,你需要根据具体的业务逻辑进行修改。 - 查询数据: ```javascript const res = await app.mysql.get('table_name', { id: 1 }); // 获取 id 为 1 的数据 const res = await app.mysql.select('table_name', { where: { status: 1 }, orders: [[ 'create_time', 'desc' ]], limit: 10 }); // 获取 status 为 1 的前 10 条数据,按照创建时间降序排列 ``` - 插入数据: ```javascript const res = await app.mysql.insert('table_name', { name: 'example' }); // 插入一条数据,name 字段为 'example' ``` - 更新数据: ```javascript const res = await app.mysql.update('table_name', { name: 'new_example' }, { where: { id: 1 } }); // 更新 id 为 1 的数据,将 name 字段更新为 'new_example' ``` - 删除数据: ```javascript const res = await app.mysql.delete('table_name', { id: 1 }); // 删除 id 为 1 的数据 ``` 这只是一些基本的示例,你可以根据需要使用更复杂的查询条件和操作。具体的语法和用法可以参考 Egg.jsMySQL 的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯小默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值