egg-mysql

在 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);
  });
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章