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; } }