解决nodejs mysql Error: Connection lost The server closed the connection

文章讲述了在Node.js应用中遇到MySQL连接因无动作而自动关闭,导致服务器Down掉的问题。作者通过将SQL连接方式改为使用连接池(mysql2模块)并调整代码,成功解决了连接稳定性问题,现在接口测试联通稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Node连接MySql,会出现几分钟无动作则自动关闭连接,导致Node服务器Down掉。
报错信息:
在这里插入图片描述
解决方法:将sql文件修改为连接池的写法,查询语句也是。
参考链接:https://www.npmjs.com/package/mysql2
具体实现:
原连接写法(db.js):写法没错,但因为数据库无操作断开机制所以还是有问题。看了其他的博客,尝试做了异常处理,还是会出现报错。

const mysql = require("mysql");
const sqlConfig = {
	host: "localhost",
	user: "root",
	password: "root",
	database: "campus",
};
var connection;

function handleDisconnect() {
	connection = mysql.createConnection(sqlConfig);

	connection.connect(function (err) {
		if (err) {
			console.log("error when connecting to db:", err);
			setTimeout(handleDisconnect, 2000);
		}
	});

	connection.on("error", function (err) {
		console.log("db error", err);
		if (err.code === "PROTOCOL_CONNECTION_LOST") {
			handleDisconnect();
		} else {
			throw err;
		}
	});
}

handleDisconnect();

export default handleDisconnect;

更改后使用连接池的写法:(db.js)

var mysql = require("mysql2");

var pool = mysql.createPool({
	host: "localhost",
	user: "root",
	password: "root",
	database: "campus",
});

module.exports = pool;

在接口中引入:(banner.js)
简单示例,没有做其他数据情况判断

const express = require("express");
const router = express.Router();
var pool = require("../db/sqlpool");

// 查看轮播图数据
router.get("/list", function (req, res, next) {
	pool.getConnection(function (err, connection) {
		if (err) throw err;

		connection.query("select * from banner", function (error, result) {
			if (error) throw error;
			var results = result || "{}";
			res.send({
				code: "200",
				message: "查看轮播图数据-admin",
				data: results,
			});
		});
		connection.release();
	});
});
module.exports = router;

经过接口测试,联通稳定,没有再自动断开。

Connection lost是指连接丢失或中断。这可能是由于多种原因引起的。引用中提到,可能出现连接失败的原因可能是错误代码为10058。然而,具体的原因没有给出。 在引用中,提到了一种可能的解决方案是使用mysql自带的无动作自动关闭机制。通过在代码中重新创建连接来解决连接中断的问题。 另外,在引用中,也提到了一些其他的解决方法,但都没有取得有效的结果。最终,他们通过卸载完全Beyond Compare,并重新安装来解决了连接丢失的问题。 综上所述,Connection lost是指连接丢失或中断的情况。解决方法可以包括重新创建连接、尝试其他解决方法或重新安装相关软件。具体解决方法需要根据具体情况而定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Beyond Compare 连接失败: Connection lost (error code is 10058)](https://blog.csdn.net/m0_37594653/article/details/113319938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [解决nodejsConnection lost: The server closed the connection](https://blog.csdn.net/anwen743680/article/details/114916451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echozzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值