我有一个node / express / mysql2 Web应用程序,该应用程序通过连接池对象访问mySql DB,并且经常遇到以下问题:我将代码保留一段时间,然后返回并访问运行查询的页面我会得到
foo中的错误:错误:连接ETIMEDOUT
栏中的错误:错误:读取ECONNRESET
我猜想在另一边,mysql会看到空闲连接并关闭它们,客户端应用程序不知道这些,从池中获取那些连接,然后遇到那些问题,很好。但是我的印象是,这是由mysql2自动处理的?
这大致就是我组织数据库代码的方式
sqlConnectionPool.js
const dbParam = require('./dbParam.js');
const sqlPool = require('mysql2/promise').createPool(dbParam.connection.prod);
module.exports = sqlPool;
dummyQuery.js
const sqlPool = require('./sqlConnectionPool.js');
module.exports.updatefoo = async (ID, sqlConnection = undefined) => {
let connection;
try {
connection = sqlConnection === undefined ? await sqlPool.getConnection() : await sqlConnection;
const [updateResult] = await connection.query('update foo set barID=?', [ID]);
if (updateResult.affectedRows !== 1) {
throw (new Error(`error on ID ${ID}`));
}
return undefined;
} catch (err) {
console.error(`Error in updatefoo: ${err}`);
return err;
} finally {
if (sqlConnection === undefined) {
connection.release();
}
}
};
我是否缺少某些东西来自动处理这些错误,或者根本就不会遇到这些错误?我猜mysql2库在遇到connreset或conntimeout错误时需要关闭连接,并将它们返回到池中。
谢谢!
答案 0 :(得分:0)
我认为您应该使用setTimeout()
之类的东西来刺破数据库。