【问题标题】:nodejs mysql close and open connectionnodejs mysql关闭和打开连接
【发布时间】:2018-10-30 00:50:16
【问题描述】:

我有一个连接到 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);
        });
}

【问题讨论】:

    标签: mysql node.js database connection


    【解决方案1】:

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

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

    谢谢!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
            "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);
        

        【讨论】:

          【解决方案4】:

          你应该使用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()
            }
          })
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-01-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多