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 实现增删改查接口?的主要内容,如果未能解决你的问题,请参考以下文章