前言

Egg中配合使用mysql来实现数据的获取和写入,并通过Egg定义的方式发送到接口里面。

一、项目中安装mysql

1、安装egg-mysql插件

1
npm i --save egg-mysql

2、配置插件:打开config/plugin.js

1
2
3
4
5
6
7
// mysql配置
module.exports = {
mysql: {
enable: true,
package: 'egg-mysql',
},
};

3、配置插件:打开config/config.default.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 数据库连接
exports.mysql = {
// 单数据库信息配置
client: {
// host
host: 'localhost',
// 端口号
port: '3306',
// 用户名
user: 'root',
// 密码
password: '123456',
// 数据库名
database: 'egg',
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
};

二、Egg.js 操作 MySql 数据库

1、新建一个stu数据库表

1
2
3
4
5
6
CREATE TABLE `stu` (  
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2、添加路由 router.js

1
2
3
4
router.get('/getStu', controller.stu.getStu);
router.post('/addStu', controller.stu.addStu);
router.post('/updateStu', controller.stu.updateStu);
router.post('/delStu', controller.stu.delStu);

3、添加学生信息

1、打开controller 中的stu.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 添加学生信息
async addStu() {
const { ctx } = this;
const { name, age } = ctx.request.body;
const result = await ctx.service.stu.addStu(name, age);
if (result) {
ctx.body = {
status: 200,
msg: '添加成功',
data: {},
};
} else {
ctx.body = {
status: 201,
msg: '添加失败',
data: {},
};
}
}

2、打开service中的stu.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 添加学生信息
* @param {*} name -名称
* @param {*} age -年龄
* @return {Object} 对象
*/
async addStu(name, age) {
try {
const params = {
name,
age,
};
const result = await this.app.mysql.insert('stu', params);
const insertSuccess = result.affectedRows === 1;
if (insertSuccess) {
return result;
}
return null;
} catch (error) {
console.log(error);
}
}

调用接口如下图
在这里插入图片描述
·我们可以在数据库的表中查看到
在这里插入图片描述

4、根据ID查寻学生信息

1、打开controller 中的stu.js

1
2
3
4
5
6
7
8
9
10
11
// 查询学生信息
async getStu() {
const { ctx } = this;
const { id } = ctx.query;
const result = await ctx.service.stu.getStu(id);
ctx.body = {
status: 200,
msg: '查询成功',
data: result,
};
}

2、打开service中的stu.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 查询学生信息
* @param {*} id -学生ID
* @return {Object} 学生信息
*/
async getStu(id) {
try {
const params = {
id
};
const result = await this.app.mysql.get('stu', params);
return result;
} catch (error) {
console.log(error);
}
}

调用接口如下图
在这里插入图片描述

5、根据ID更新学生信息

1、打开controller 中的stu.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 更新学生信息
async updateStu() {
const { ctx } = this;
const params = ctx.request.body;
const result = await ctx.service.stu.updateStu(params);
if (result) {
ctx.body = {
status: 200,
msg: '更新成功',
data: result,
};
} else {
ctx.body = {
status: 201,
msg: '更新失败',
data: {},
};
}
}

2、打开service中的stu.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* 更新学生信息
* @param {*} params 学生信息
* @return {Object} 对象
*/
async updateStu(params) {
try {
const result = await this.app.mysql.update('stu', params);
const updateSuccess = result.affectedRows === 1;
if (updateSuccess) {
return result;
}
return null;
} catch (error) {
console.log(error);
}
}

调用接口如下图
在这里插入图片描述
我们可以在数据库的表看到数据已经更新啦
在这里插入图片描述

6、根据ID删除学生信息

1、打开controller 中的stu.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 删除学生信息
async delStu() {
const { ctx } = this;
const { id } = ctx.request.body;
const result = await ctx.service.stu.delStu(id);
if (result) {
ctx.body = {
status: 200,
msg: '删除成功',
data: {},
};
} else {
ctx.body = {
status: 201,
msg: '删除失败',
data: {},
};
}
}

2、打开service中的stu.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 删除学生信息
* @param {*} id 学生ID
* @return {Object} 对象
*/
async delStu(id) {
try {
const result = await this.app.mysql.delete('stu', {
id,
});
return result;
} catch (error) {
console.log(error);
}
}

调用接口如下图
在这里插入图片描述