【问题标题】:How to handle error of closed MySQL connection in Node.js?如何处理 Node.js 中关闭 MySQL 连接的错误?
【发布时间】:2020-02-07 04:34:45
【问题描述】:

我已经构建了一个连接到 MySQL 数据库的 Node.js API。我使用node-mysql2 作为驱动程序。 API 和数据库在单独的 Docker 容器中运行。在 Kubernetes 集群中部署后的某个时间点,我收到以下错误:

Error: Can't add new command when connection is in closed state                                                                                                                                                                                                    
    at PromiseConnection.query (/usr/src/app/node_modules/mysql2/promise.js:92:22)  

我想知道为什么会发生此错误以及如何使用 Node.js 捕获和处理它。这些是我的 Node.js API 的代码 sn-ps:

const mysql = require('mysql2/promise')
...

async function main() {
    try {
        const client = await mysql.createConnection({
            host: DATABASE_HOST,
            port: DATABASE_PORT,
            user: DATABASE_USERNAME,
            password: DATABASE_PASSWORD,
            database: DATABASE_NAME
        })

        client.on('error', error => {
            process.stderr.write(`${error.code}\n`) // PROTOCOL_CONNECTION_LOST
            process.stderr.write(`An error occurred while connecting to the db: ${error.message}\n`)
            process.exit(1)
        })

    } catch (error) {
        process.stderr.write(`Error while creating db connection: ${error.code}\n`)
    }

    ...
}

...


main().catch(err => {
  process.stderr.write(`Error message: ${err.message}\n`)
  process.exit(1)
})

您知道如何处理此错误吗?

【问题讨论】:

    标签: node.js api mysql2 node-mysql2


    【解决方案1】:

    完成后是否关闭连接?

    client.end();
    

    也考虑使用池?

    const pool = mysql.createPool({
      host: DATABASE_HOST,
      user: DATABASE_USERNAME,
      database: DATABASE_NAME,
      waitForConnections: true,
      connectionLimit: 10,
      queueLimit: 0
    });
    

    更多关于池的信息:https://github.com/sidorares/node-mysql2#using-connection-pools

    【讨论】:

    猜你喜欢
    • 2020-05-24
    • 2014-08-18
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2019-10-28
    • 2018-10-18
    相关资源
    最近更新 更多