最近踩了一个坑,代码如下:
运行时一直报错,无法获取数据库链接,看了几眼一直没有看出是哪里的问题,其实已经大概能猜到是连接池这里的写法问题了,然后问了一下deepseek,不得不佩服于它的思考过程
const mysql = require("mysql2");
const { dbConfig } = require("./config.js");
const logger = require('./utils/logger');
const pool = mysql.createPool({
...dbConfig,
waitForConnections: true, // 当没有可用连接时等待
connectionLimit: 10, // 最大连接数
queueLimit: 0 // 无限队列
});
async function mysqlQuery(sqlStr) {
let connection;
try {
connection = await pool.getConnection();
if (!connection) {
logger.error("无法获取数据库连接");
throw new Error("无法获取数据库连接");
}
logger.debug(`获取到连接: ${connection.threadId}`); // 添加日志
const [results] = await connection.query(sqlStr);
return results;
} catch (error) {
logger.error(`执行 SQL 语句失败: ${error.message}`);
throw error;
} finally {
if (connection) connection.release(); // 释放连接回池中
logger.debug(`释放连接: ${connection.threadId}`); // 添加日志
}
}
将mysql.createPool转换成promise就可以正常执行了,也算是小小的踩了个坑