繁体   English   中英

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

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

谢谢!

在每个请求上创建和拆除数据库连接会降低每个请求的响应时间,从而影响整体性能。 您应该考虑使用https://www.npmjs.com/package/mysql#pooling-connections 中记录的连接池。 连接池将应用程序与诸如服务器因缺乏活动而终止空闲连接之类的场景隔离开来。

    "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()
  }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM