NodeJS (Express)与MySQL -如何处理连接重置?



我正在用NodeJS运行我的网站,我正在使用Express框架。因为MySQL是我主机上唯一的数据库类型,我就用它了。

我创建了一个db.js文件:
const mysql = require('mysql');
const con = mysql.createConnection({
host: .........
user: ...........
password: ............
database: ............
});

con.connect(function(err) {
if (err) {
//throw err;
console.error(err.message);
} else {
console.log('Connected Ro MySQL!');
}
});
module.exports = con;

我这样使用它:

const db = require(path.join(__dirname, 'db'));
db.query('select * from table where name = ?', request.params.id, (error, result) => {
if (error) { 
response.send(error.message);
} else {
//My Render Stuffs Here
});
}
});

我的网站工作得很好,但有时让我们说一次每2周有一个MySQL连接重置,我认为数据库不可用一分钟左右的原因,然后我的网站崩溃,我不得不手动重启NodeJS是非常烦人的。

控制台错误:

node:events:355
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at TCP.onStreamRead (node:internal/stream_base_commons:211:20)
[...]
errno: -4077,
code: 'ECONNRESET',
syscall: 'read',
fatal: true
}

我应该如何修改我的代码来防止崩溃?我替换了throw err;使用console.error(err.message);但它只在我启动网站时起作用,而不是在运行时发生连接重置。

找到了解决方案:用createPool替换createConnection,并完全删除con.connect,因为createPool不需要它。这就是它,现在它不会崩溃,当数据库不可用。

最新更新