MySQL安装成功后,在egg项目中安装egg-mysql插件,配置完成后,编写查询、新增、删除、编辑接口。

一、安装MySQL

版本选择MySQL 8.0.20 Mac Intel 版本

安装过程设置密码:0987654321

此时在terminal输入命令:

1
mysql -u root -p

Commod not found

1、termina进入 路径:/usr/local/mysql/bin 查看目录是否有mysql

如果存在,在此路径下执行:vim ~/.bash_profile

打开后,输入 i 键,进入编辑,在.bash_profile中添加mysql/bin的目录,完成后,ESC退出编辑,输入:wq回车保存

1
PATH=$PATH:/usr/local/mysql/bin

2、输入source ~/.bash_profile 使配置生效

3、指令登录数据库:mysql -u root -p 输入密码:0987654321

4、开启服务:mysql.server start

二、egg.js安装egg-mysql插件

1、安装egg-mysql及插件配置

1
npm install egg-mysql

config/plugin.js

1
2
3
4
5
6
7
8
9
10
11
12
13
'use strict';

/** @type Egg.EggPlugin */
module.exports = {
ejs: {
enable: true,
package: 'egg-view-ejs'
},
mysql: {
enable: true,
package: 'egg-mysql'
}
};

config/plugin-default.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
exports.mysql = {
// 单数据库信息配置
client: {
// host
host: 'localhost',
// 端口号
port: '3306',
// 用户名
user: 'root',
// 密码
password: '数据库密码', // 初始化密码,没设置的可以不写
// 数据库名
database: 'test', // 我们新建的数据库名称
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
};

2、修改 service/home.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'use strict';

const Service = require('egg').Service;

class HomeService extends Service {
async user() {
const { ctx, app } = this;
const QUERY_STR = 'id, name';
let sql = `select ${QUERY_STR} from list`; // 获取 id 的 sql 语句
try {
const result = await app.mysql.query(sql); // mysql 实例已经挂载到 app 对象下,可以通过 app.mysql 获取到。
return result;
} catch (error) {
console.log(error);
return null;
}
}
}
module.exports = HomeService;

3、修改controller/home.js中的user方法

1
2
3
4
5
async user() {
const { ctx } = this;
const result = await ctx.service.home.user();
ctx.body = result
}

4、路由配置

1
router.get('/user', controller.home.user);

三、新增接口

service/home.js 下新建一个函数 addUser

1
2
3
4
5
6
7
8
9
10
11
// 新增
async addUser(name) {
const { ctx, app } = this;
try {
const result = await app.mysql.insert('list', { name }); // 给 list 表,新增一条数据
return result;
} catch (error) {
console.log(error);
return null;
}
}

再为 controller/home.js 添加一个 addUser 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
async addUser() {
const { ctx } = this;
const { name } = ctx.request.body;
try {
const result = await ctx.service.home.addUser(name);
ctx.body = {
code: 200,
msg: '添加成功',
data: null
}
} catch (error) {
ctx.body = {
code: 500,
msg: '添加失败',
data: null
}
}
}

配置路由

1
router.post('/add_user', controller.home.addUser);

这个post请求需要使用postman测试接口是否成功。

四、编辑接口

通过 /user 拿到了列表数据,我们可以通过 id 定位某条数据,去修改它的 name 属性。

/service/home.js,添加编辑操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 编辑
async editUser(id, name) {
const { ctx, app } = this;
try {
let result = await app.mysql.update('list', { name }, {
where: {
id
}
});
return result;
} catch (error) {
console.log(error);
return null;
}
}

/controller/home.js 添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 编辑
async editUser() {
const { ctx } = this;
const { id, name } = ctx.request.body;
try {
const result = await ctx.service.home.editUser(id, name);
ctx.body = {
code: 200,
msg: '添加成功',
data: null
}
} catch (error) {
ctx.body = {
code: 500,
msg: '添加失败',
data: null
}
}
}

配置路由:

1
router.post('/edit_user', controller.home.editUser);

post请求需要使用postman工具测试接口

五、删除接口

/service/home.js 添加删除接口

1
2
3
4
5
6
7
8
9
10
11
// 删除
async deleteUser(id) {
const { ctx, app } = this;
try {
let result = await app.mysql.delete('list', { id });
return result;
} catch (error) {
console.log(error);
return null;
}
}

/controller/home.js 添加相应的控制器方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 删除
async deleteUser() {
const { ctx } = this;
const { id } = ctx.request.body;
try {
const result = await ctx.service.home.deleteUser(id);
ctx.body = {
code: 200,
msg: '删除成功',
data: null
}
} catch (error) {
ctx.body = {
code: 500,
msg: '删除失败',
data: null
}
}
}

添加相应路由:

1
2
// router.js
router.post('/delete_user', controller.home.deleteUser);