数据库操作(框架自带) - Mysql
1. 安装
bash
npm install egg-mysql --save
2. 配置
- 插件
js
// config/plugin.js
exports.mysql = {
enable: true,
package: "egg-mysql",
};
- 默认
js
// config/config.default.js
exports.mysql = {
// 单数据库信息配置
client: {
// host
host: "localhost",
// 端口号
port: "3306",
// 用户名
user: "root",
// 密码
password: "123456",
// 数据库名
database: "test",
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
};
- Mysql 可能会报错误
bash
ERROR 5954 nodejs.ER_NOT_SUPPORTED_AUTH_MODEError: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
INFO
是因为你使用了 MySQL 8.x 版本,而 egg-mysql 依赖了 ali-rds 这个包,这是阿里自己封装的包,里面又依赖了 mysql 这个包,而这个包已经废弃,不支持 caching_sha2_password 加密方式导致的。可以在 MySQL workbench 中运行下面的命令来解决:
bash
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
flush privileges
3.使用
路由
- 增加路由 router.js
js
router.post("/database", controller.database.getcontent);
router.post("/database/insert", controller.database.insert);
router.post("/database/update", controller.database.update);
router.post("/database/del", controller.database.del);
Controller 层
- 新建一个文件
controller/database.js
js
const Controller = require("egg").Controller;
class StudentController extends Controller {
async getcontent() {
const ctx = this.ctx;
const result = await ctx.service.database.getcontent(ctx.request.body.id);
ctx.body = {
status: 200,
data: result,
};
}
async insert() {
const { ctx } = this;
const { result } = await ctx.service.database.InsertInfo(ctx.request.body);
if (result.affectedRows == 1) {
ctx.body = {
status: 200,
data: "插入成功",
};
} else {
ctx.body = {
status: 200,
data: "插入失败",
};
}
}
async update() {
const { ctx } = this;
const result = await ctx.service.database.update(ctx.request.body);
ctx.body = {
status: 200,
data: result,
};
}
async del() {
const { ctx } = this;
const { result } = await ctx.service.database.del(ctx.request.body);
if (result.affectedRows === 1) {
ctx.body = {
status: 200,
data: "删除成功",
};
} else {
return {
status: 200,
data: "删除失败",
};
}
}
}
module.exports = StudentController;
Service 层
- 新建一个文件
service/database.js
js
"use strict";
const Service = require("egg").Service;
class DataBaseService extends Service {
// 更新数据
async update(data) {
try {
const result = await this.app.mysql.update("student_score", data, {
where: { number: data.number },
});
return result;
} catch (err) {
return { err };
}
}
// 获取数据
async getcontent(id) {
try {
const result = await this.app.mysql.select("student_score", {
where: { number: id },
columns: ["subject", "score"],
});
// const result = await this.app.mysql.query(
// `select * from student_score where number> ${id} `
// );
return { result };
} catch (err) {
return { err };
}
}
// 插入数据
async InsertInfo(data) {
try {
const result = await this.app.mysql.insert("student_score", data);
return { result };
} catch (err) {
return { err };
}
}
// 删除数据
async del(data) {
try {
const result = await this.app.mysql.delete("student_score", {
number: data.number,
});
return { result };
} catch (err) {
return { err };
}
}
}
module.exports = DataBaseService;
- 也可以直接用 mysql 语句
js
const results = await this.app.mysql.query(
"update data_person set age = (age + ?) where person_id = ?",
[5, personId]
);