Gathering detailed insights and metrics for egg-mysql
Gathering detailed insights and metrics for egg-mysql
Gathering detailed insights and metrics for egg-mysql
Gathering detailed insights and metrics for egg-mysql
npm install egg-mysql
Typescript
Module System
Min. Node Version
Node Version
NPM Version
83.3
Supply Chain
98.2
Quality
82.6
Maintenance
100
Vulnerability
99.6
License
TypeScript (97.96%)
JavaScript (2.04%)
Total Downloads
1,694,477
Last Day
855
Last Week
6,476
Last Month
29,826
Last Year
335,577
MIT License
332 Stars
49 Commits
60 Forks
15 Watchers
3 Branches
30 Contributors
Updated on May 03, 2025
Latest Version
5.0.0
Package Id
egg-mysql@5.0.0
Unpacked Size
21.14 kB
Size
7.49 kB
File Count
9
NPM Version
10.8.2
Node Version
20.18.3
Published on
Mar 08, 2025
Cumulative downloads
Total Downloads
Last Day
-10%
855
Compared to previous day
Last Week
-4.9%
6,476
Compared to previous week
Last Month
-1.6%
29,826
Compared to previous month
Last Year
-9.8%
335,577
Compared to previous year
1
MySQL 插件是为 egg 提供 MySQL 数据库访问的功能
此插件基于 @eggjs/rds 实现一个简单的配置封装,具体使用方法你还需要阅读 @eggjs/rds 的文档。
1npm i egg-mysql --save
通过 config/plugin.ts
配置启动 MySQL 插件:
1export default { 2 mysql: { 3 enable: true, 4 package: 'egg-mysql', 5 }, 6}
在 config/config.${env}.ts
配置各个环境的数据库连接信息:
1export default { 2 mysql: { 3 // 单数据库信息配置 4 client: { 5 // host 6 host: 'mysql.com', 7 // 端口号 8 port: '3306', 9 // 用户名 10 user: 'test_user', 11 // 密码 12 password: 'test_password', 13 // 数据库名 14 database: 'test', 15 }, 16 // 是否加载到 app 上,默认开启 17 app: true, 18 // 是否加载到 agent 上,默认关闭 19 agent: false, 20 }, 21}
使用方式:
1await app.mysql.query(sql, values); // 单实例可以直接通过 app.mysql 访问
1export default { 2 mysql: { 3 clients: { 4 // clientId, 获取client实例,需要通过 app.mysql.get('clientId') 获取 5 db1: { 6 // host 7 host: 'mysql.com', 8 // 端口号 9 port: '3306', 10 // 用户名 11 user: 'test_user', 12 // 密码 13 password: 'test_password', 14 // 数据库名 15 database: 'test', 16 }, 17 // ... 18 }, 19 // 所有数据库配置的默认值 20 default: { 21 22 }, 23 24 // 是否加载到 app 上,默认开启 25 app: true, 26 // 是否加载到 agent 上,默认关闭 27 agent: false, 28 }, 29}
使用方式:
1const client1 = app.mysqls.get('db1'); 2await client1.query(sql, values); 3 4const client2 = app.mysqls.get('db2'); 5await client2.query(sql, values);
如果开启了 config.mysql.app = true
,则会在 app 上注入 @eggjs/rds 客户端 的 Singleton 单例。
1await app.mysql.query(sql); 2await app.mysqls.get('db1').query(sql);
如果开启了 config.mysql.agent = true
,则会在 agent 上注入 @eggjs/rds 客户端 的 Singleton 单例。
1await agent.mysql.query(sql); 2await agent.mysqls.get('db1').query(sql);
1// 插入 2const result = await app.mysql.insert('posts', { title: 'Hello World' }); 3const insertSuccess = result.affectedRows === 1;
1// 获得一个 2const post = await app.mysql.get('posts', { id: 12 }); 3// 查询 4const results = await app.mysql.select('posts',{ 5 where: { status: 'draft' }, 6 orders: [['created_at','desc'], ['id','desc']], 7 limit: 10, 8 offset: 0 9});
1// 修改数据,将会根据主键 ID 查找,并更新 2const row = { 3 id: 123, 4 name: 'fengmk2', 5 otherField: 'other field value', 6 modifiedAt: app.mysql.literals.now, // `now()` on db server 7}; 8const result = await app.mysql.update('posts', row); 9const updateSuccess = result.affectedRows === 1;
1const result = await app.mysql.delete('table-name', { 2 name: 'fengmk2' 3});
1const conn = await app.mysql.beginTransaction(); 2 3try { 4 await conn.insert(table, row1); 5 await conn.update(table, row2); 6 await conn.commit(); 7} catch (err) { 8 // error, rollback 9 await conn.rollback(); // rollback call won't throw err 10 throw err; 11}
async beginTransactionScope(scope, ctx)
scope
: 一个 generatorFunction,在这个函数里面执行这次事务的所有 sql 语句。ctx
: 当前请求的上下文对象,传入 ctx 可以保证即便在出现事务嵌套的情况下,一次请求中同时只有一个激活状态的事务。1const result = await app.mysql.beginTransactionScope(async (conn) => { 2 // don't commit or rollback by yourself 3 await conn.insert(table, row1); 4 await conn.update(table, row2); 5 return { success: true }; 6}, ctx); // ctx 是当前请求的上下文,如果是在 service 文件中,可以从 `this.ctx` 获取到 7// if error throw on scope, will auto rollback
1const results = await app.mysql.query('update posts set hits = (hits + ?) where id = ?', [1, postId]);
如果需要调用mysql内置的函数(或表达式),可以使用Literal
。
app.mysql.literals.now
获取。1await app.mysql.insert(table, { 2 create_time: app.mysql.literals.now 3}); 4 5// INSERT INTO `$table`(`create_time`) VALUES(NOW())
下例展示了如何调用mysql内置的CONCAT(s1, ...sn)
函数,做字符串拼接。
1const Literal = app.mysql.literals.Literal; 2const first = 'James'; 3const last = 'Bond'; 4await app.mysql.insert(table, { 5 id: 123, 6 fullname: new Literal(`CONCAT("${first}", "${last}"`), 7}); 8 9// INSERT INTO `$table`(`id`, `fullname`) VALUES(123, CONCAT("James", "Bond"))
Please open an issue here.
Made with contributors-img.
No vulnerabilities found.
No security vulnerabilities found.