使用 MySQL2 连接性能改进 NodeJS

问题描述

我有一个课程 db.config.js,我将在其中连接到数据库

const dotenv = require('dotenv');
dotenv.config();
const MysqL2 = require('MysqL2');

class DBConnection {
  constructor() {
    this.db = MysqL2.createPool({
      host: 'localhost',user: 'localhost',password: '************',database: '************'
    });

    this.checkConnection();
  }

  checkConnection() {
    this.db.getConnection((err,connection) => {
      if (err) {
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {
          console.error('Database connection was closed.');
        }
        if (err.code === 'ER_CON_COUNT_ERROR') {
          console.error('Database has too many connections.');
        }
        if (err.code === 'ECONNREFUSED') {
          console.error('Database connection was refused.');
        }
      }
      if (connection) {
        connection.release();
      }
      return
    });
  }

  query = async (sql,values) => {
    return new Promise((resolve,reject) => {
      const callback = (error,result) => {
        if (error) {
          reject(error);
          return;
        }
        resolve(result);
      }
      // execute will internally call prepare and query
      this.db.execute(sql,values,callback);
    }).catch(err => {
      const MysqLErrorList = Object.keys(HttpStatusCodes);
      // convert MysqL errors which in the MysqLErrorList list to http status code
      err.status = MysqLErrorList.includes(err.code) ? HttpStatusCodes[err.code] : err.status;

      throw err;
    });
  }
}

// like ENUM
const HttpStatusCodes = Object.freeze({
  ER_TruncATED_WRONG_VALUE_FOR_FIELD: 422,ER_DUP_ENTRY: 409
});


module.exports = new DBConnection().query;

正如您所看到的,唯一的 query 函数被导出并在每次查询时像 await query(sql,values) 一样调用它,如下所示:

getTable = async (parameters = {}) => {
        let sql = `SELECT * from Table`;

        return await query(sql);
}

这个领域的新手,不知何故,对于每次进行的查询,连接都会打开并再次重新打开。 我还没有看到任何性能问题,我的意思是,查询每次都以毫秒为单位返回,但我担心建立连接的方式是否可能每次查询都打开,而不仅仅是一次。>

希望我正确地举例说明了我的问题!

感谢您的宝贵时间!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)