Node.js 服務連線 MySQL

ipenman發表於2018-10-25

作為nodejs程式猴,必然少不了寫指令碼,而我的工作中用的比較多的資料庫為mysql,發現每寫一次指令碼就會寫一套連線mysql的配置,如此重複,索性自己寫一個工具類(mysql.js):

'use strict';
const mysql = require('mysql');

class MySQL {
    constructor(DBConf) {
        this.pool = mysql.createPool(DBConf); // 這裡的DBConf指的是資料庫資訊
        console.log('---------------------------------------------------已建立資料庫連線池----------------------------------------------');
    }

    static getInstance(DBConf) {
        if (!MySQL.instance) {
            MySQL.instance = new MySQL(DBConf);
        }
        return MySQL.instance;
    }

    query(sql, options) {
        return new Promise((resolve, reject) => {
            this.pool.getConnection((err, conn) => {
                if (err) {
                    reject(err);
                    console.error(sql, err);
                } else {
                    conn.query(sql, options, (error, results) => {
                        //釋放連線  
                        conn.release();
                        if (error) {
                            console.error(sql, options, error);
                            reject(error);
                        } else {
                            //事件驅動回撥  
                            resolve(results);
                        }
                    });
                }
            });
        });
    }
}


module.exports = MySQL;
複製程式碼

使用方式,在同級目錄下建立DBConf.js:

module.exports = {
    connectionLimit: 3,     // 連線池的最大連線數
    user: 'root',           // 資料庫使用者名稱
    password: '123456',     // 密碼
    database: 'test',  // 資料庫名稱
    host: '127.0.0.1',      // ip
    multipleStatements: true    // 允許多sql執行
}
複製程式碼

同級目錄下建立test.js

'use strict';
const DBConf = require('./DBConf');
const MySQL = require('./mysql').getInstance(DBConf);

(getAllUser() {
    const result = await MySQL.query("select * from user");
    console.log(result);
})();
複製程式碼

完整例項在這裡 github.com/iPenManShip…,如果幫助到您,點個贊,我把這個包釋出到了npm:npm install node-mysql-instance 就可以下載下來使用了!如果有需要更正的地方,望指出,希望自己能夠得到你們的支援和幫助!

相關文章