>我构建了一个连接到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 的代码片段:
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)
})
您知道如何处理此错误吗?
完成后是否关闭连接?
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