使用单例模式,数据库线程池,网上找的一些不是很好用,就自己简单写了一个,方便后期使用
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)
})