nodejs mysql 关闭和打开连接

nodejs mysql close and open connection

我有一个连接到 mysql 的 nodejs 应用程序 当我离开连接时打开服务器关闭它 当我使用 con.destroy 或 con.end 我无法重新连接到 mysql.

我应该怎么办,知道会有很多请求时,最好继续关闭并为每个请求选择新连接。

module.exports = class DataAccessLayer {
constructor() {
    this.con = mysql.createConnection({
        host: ("host.com"),
        user: ("asdfg"),
        password: ("zxcvb"),
        database: ("DB_example")
    });

    this.con.connect(function (err) {
        if (err) throw err;
        console.log("Connected to DB");
    });
}

getUserBySenderId(senderId) {
    this.con.query("SELECT sender_id,first_name,last_name,creation_date " +
        "FROM USER " +
        "WHERE sender_id = '" + senderId + "'",
        function (err, result, fields) {
            if (err) throw err;
            console.log(result);
        });
}

针对每个请求创建和断开数据库连接会降低每个请求的响应时间,从而影响整体性能。您应该考虑使用 https://www.npmjs.com/package/mysql#pooling-connections 中记录的连接池。连接池将应用程序与服务器因缺少 activity.

而终止空闲连接等场景隔离开来

对于你的问题,你可以访问这个文档https://www.npmjs.com/package/mysql#pooling-connections

而不是每次都进行查询并一次又一次地进行数据库命中 MYSQL。还需要记住什么时候关闭连接什么时候打开是一个相当繁琐的工作。您可以使用 Sequelize http://docs.sequelizejs.com/ (ORM)。这将帮助您摆脱所有这些痛苦,让您专注于业务逻辑而不是技术错误。

HTH 谢谢!

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

    class DB {
      constructor() {
        this.conn = mysql.createConnection({
          host: 'localhost',enter code here
          user: 'root',
          password: 'pass',
          database: 'db_name'
        });
      }

      connect() {
        this.conn.connect(function (err) {
          if (err) {
            console.error("error connecting: " + err.stack);
            return;
          }
          console.log("connected to DBB");
        });
      }

      checkQuery(id) { 

        try {
          this.conn.query(`SELECT * FROM tablename WHERE id = ${id}`, function (err, result) {
            if (err) {
              console.log('err');
              throw err;
            } else {
              console.log(result);

            }
          });
        } catch (e) {
          console.log('Exception caught in checkQuery()', e)
        }
      }

module.exports = DB
var obj = new DB();
obj.checkQuery(2);

你应该使用mysql pooling,但是如果你想为每个请求打开和关闭一个连接,你可以使用async

const async = require('async')
const mysql = require('mysql')

const db = mysql.createConnection(DBInfo)
const query = 'SOME MYSQL QUERY'

async.series([
  function (next) {
    db.connect(function (err) {
      if (err) {
        console.error('error connecting: ' + err.stack)
        next(Error(err))
      } else {
        console.log('Connection successfuly')
        next()
      }
    })
  },
  function (next) {
    db.query(query, function (err, results, fields) {
      if (err) {
        next(Error(err))
      } else {
        console.log(query + ' submitted with success')
        next()
      }
    })
  },
  function (next) {
    db.end(function (err) {
      if (err) {
        next(Error(err))
      } else {
        next()
      }
    })
  }
],
function (err, results) {
  if (err) {
    console.error('There was an error: ', err)
    db2.end()
  }
})