ZenWeb MySQL Module
提供 MySQL 单数据库服务器以及集群的连接池集成功能。
并提供 Context
进行数据库连接的前置处理。
安装
npm install @zenweb/mysql
快速使用
src/index.ts
import { create } from 'zenweb';
import modMySQL from '@zenweb/mysql';
const app = create();
app.setup(modMySQL({
pools: {
// 添加数据库服务器配置
DB1: {
host: '127.0.0.1',
port: 3306,
user: 'root',
password: '',
database: 'test',
charset: 'utf8mb4',
timezone: '+08:00',
connectionLimit: 100,
},
// 如需集群功能可以继续添加 MySQL 配置
// DB2: { ... },
// ....
}
}));
app.start();
可以直接通过 app.mysql
或者 ctx.mysql
来使用连接池
使用 Context 前置处理
注意
如果使用 withContext
前置处理,数据库连接池对象只能在 Context
中使用。
import { Query } from 'mysql-easy-query';
app.setup(mysql({
pools: {
// 数据库服务器配置这里省略,参考上面代码
},
// 在每次获取连接之前回调
// 所属数据库服务器切换
getPoolConnectionBefore(opt) {
return {
// opt 参数为传入的原始集群选择规则
// 返回新的集群选择规则
pattern: opt?.pattern || '*',
selector: opt?.selector,
};
},
// 成功取得数据库连接后回调
getPoolConnectionAfter(conn) {
return conn; // conn 为已取得的 MySQL 连接
},
}));
查询数据库
src/controller/test.ts
import { mapping } from 'zenweb';
import { $mysql } from '@zenweb/mysql';
export class TestController {
@mapping()
async mysql() {
// 简单查询
return await $mysql.query('SELECT 1+1');
}
// 使用事物
@mapping()
async transaction(ctx: Context) {
return await $mysql.transaction(async tx => {
await tx.query('UPDATE some SET a = 1');
await tx.query('UPDATE other SET b = 2');
return 'OK';
});
}
// 使用指定的数据库服务器
@mapping()
async cluster() {
return await $mysql.of('DB2').query('SELECT * FROM some');
}
}