node 单例模式的mysql处理的简单封装

2022/1/19 19:22:52

本文主要是介绍node 单例模式的mysql处理的简单封装,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

使用单例模式,数据库线程池,网上找的一些不是很好用,就自己简单写了一个,方便后期使用

const mysql = require('mysql'); //导入mysql中间件

const lodash = require('lodash');

// 默认配置文件
var defaultConfig= require('@/config/mysql.js');

class DB {
    // 多次连接共享实例对象
    static getInstance () {
        if (!DB.instance) {
            DB.instance = new DB();
        };
        // 简化性能提升
        return DB.instance;
    }

    //默认初始化执行方法
    constructor() {
        // 存放mysql连接后的对象
        this.pool = "";
        this.dbClient = "";
        this.config = defaultConfig
    };

    // 修改数据库链接配置
    setConfig (conf) {
        // merge 和 assign 区别在于assign 只能合并第一层,merge 可以递归合并多层,具体查看lodash官方文档
        this.config = lodash.merge(this.config, conf);

        // 初始化连接数据库
        this.connect()
    }

    //1.建立连接
    connect () {
        const that = this
        return new Promise((resolve, reject) => {
            //创建服务器连接池,赋值给pool 
            if (!that.pool) {
                that.pool = mysql.createPool(that.config)
            }

            //创建服务器连接,将连接对象,赋值给dbClient
            if (!that.dbClient) {
                that.pool.getConnection(function (err, connection) {
                    if (err) {
                        reject(err)
                    } else {
                        that.dbClient = connection
                        resolve(that.dbClient)
                    }
                });
            } else {
                resolve(that.dbClient);
            }
        });
    };

    // 查询
    query (sql, params = []) {
        return new Promise((resolve, reject) => {
            this.connect().then(db => {
                db.query(sql, params, (err, rows, fields) => {
                    err ? reject(err) : resolve(rows);
                    this.release()
                });
            });
        });
    }

    //释放连接
    release () {
        this.dbClient.release();
        this.dbClient = ""
    }

    //关闭连接
    close () {
        this.dbClient.destroy();
        this.dbClient = ""
    }

    //关闭连接池
    end () {
        this.pool.end();
        this.pool = ""
        this.dbClient = ""
    }
}

module.exports = DB.getInstance();

使用很简单直接引用,可以复制过去直接用

const mydb = require("../db/mydb.js");

mydb.query("select * from data where id = ?", [1]).then(res => {
    console.log(res)
})



这篇关于node 单例模式的mysql处理的简单封装的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程