在 Web 應用方面 MySQL 是最常見,最好的關係型數據庫之一。
非常多網站都選擇 MySQL 作爲網站數據庫。
egg-mysql
框架提供了 egg-mysql 插件來訪問 MySQL 數據庫。這個插件既可以訪問普通的 MySQL 數據庫,也可以訪問基於 MySQL 協議的在線數據庫服務。
安裝與配置
安裝對應的插件 egg-mysql :
$ npm i --save egg-mysql
開啓插件:
// config/plugin.js
exports.mysql = {
enable: true,
package: 'egg-mysql',
};
在 config/config.${env}.js 配置各個環境的數據庫連接信息。
單數據源
如果我們的應用只需要訪問一個 MySQL 數據庫實例,可以如下配置:
// config/config.${env}.js
exports.mysql = {
// 單數據庫信息配置
client: {
// host
host: 'mysql.com',
// 端口號
port: '3306',
// 用戶名
user: 'test_user',
// 密碼
password: 'test_password',
// 數據庫名
database: 'test',
},
// 是否加載到 app 上,默認開啓
app: true,
// 是否加載到 agent 上,默認關閉
agent: false,
};
使用方式:
await app.mysql.query(sql, values); // 單實例可以直接通過 app.mysql 訪問
多數據源
如果我們的應用需要訪問多個 MySQL 數據源,可以按照如下配置:
exports.mysql = {
clients: {
// clientId, 獲取client實例,需要通過 app.mysql.get('clientId') 獲取
db1: {
// host
host: 'mysql.com',
// 端口號
port: '3306',
// 用戶名
user: 'test_user',
// 密碼
password: 'test_password',
// 數據庫名
database: 'test',
},
db2: {
// host
host: 'mysql2.com',
// 端口號
port: '3307',
// 用戶名
user: 'test_user',
// 密碼
password: 'test_password',
// 數據庫名
database: 'test',
},
// ...
},
// 所有數據庫配置的默認值
default: {
},
// 是否加載到 app 上,默認開啓
app: true,
// 是否加載到 agent 上,默認關閉
agent: false,
};
使用方式:
const client1 = app.mysql.get('db1');
await client1.query(sql, values);
const client2 = app.mysql.get('db2');
await client2.query(sql, values);
動態創建
我們可以不需要將配置提前申明在配置文件中,而是在應用運行時動態的從配置中心獲取實際的參數,再來初始化一個實例。
// {app_root}/app.js
module.exports = app => {
app.beforeStart(async () => {
// 從配置中心獲取 MySQL 的配置
// { host: 'mysql.com', port: '3306', user: 'test_user', password: 'test_password', database: 'test' }
const mysqlConfig = await app.configCenter.fetch('mysql');
app.database = app.mysql.createInstance(mysqlConfig);
});
};