前言
Egg中配合使用mysql来实现数据的获取和写入,并通过Egg定义的方式发送到接口里面。
一、项目中安装mysql
1、安装egg-mysql插件
npm i --save egg-mysql
2、配置插件:打开config/plugin.js
// mysql配置
module.exports = {
mysql: {
enable: true,
package: 'egg-mysql',
},
};
3、配置插件:打开config/config.default.js
// 数据库连接
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数据库表
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
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
// 添加学生信息
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
/**
* 添加学生信息
* @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
// 查询学生信息
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
/**
* 查询学生信息
* @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
// 更新学生信息
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
/**
* 更新学生信息
* @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
// 删除学生信息
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
/**
* 删除学生信息
* @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);
}
}
调用接口如下图