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 的数据
数据库刷新: