ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2022-01-19 16:30:14  阅读:202  来源: 互联网

标签:node resolve err DB 单例 mysql dbClient pool


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

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,resolve,err,DB,单例,mysql,dbClient,pool
来源: https://blog.csdn.net/u012533474/article/details/122583799

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有