MySQL 的 NodeJS (Express) - 如何处理连接重置?
NodeJS (Express) with MySQL - How to handle connection resets?
我 运行 我的网站使用 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);但它只在我启动网站时有效,而不是在运行时发生连接重置时。
找到解决方案:将 createConnection
替换为 createPool
并完全删除 con.connect
,因为 createPool 不需要它。就是这样,现在当数据库不可用时它不会崩溃。
我 运行 我的网站使用 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);但它只在我启动网站时有效,而不是在运行时发生连接重置时。
找到解决方案:将 createConnection
替换为 createPool
并完全删除 con.connect
,因为 createPool 不需要它。就是这样,现在当数据库不可用时它不会崩溃。