跳到主要内容

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