NodeJs相关内容

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

PHPer 2024-10-02 8 0 0

nodejs连接mysql数据库一段时间(具体多长时间不知道是在哪里设置的)无操作会断开连接,导致后续执行sql时会报错:数据库服务器已经关闭了连接,为此用下面方法解决。 20241002

var mysqlConfig = {     
      host     : 'localhost',       
      user     : 'test',              
      password : '123456',       
      port: '3306',                   
      database: 'test' 
    };
    var connection = mysql.createConnection(mysqlConfig); 
    connection.connect();
    connection.on('error',err=>{
            console.log('Re-connecting lost connection: ');
            connection = mysql.createConnection(mysqlConfig)
        });
    ......	    	

上面是我实测有效的方法 20241002


下面是转载的内容

Node连接MySql,会出现几分钟无动作则自动关闭连接,导致Node服务器Down掉。 报错信息: 0cd872d215_normal.png 解决方法:将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) ...

立即注册

更新于:2024-10-02 23:19:54
    您需要登录后才可以评论。 立即注册

    解决nodejs mysql Error: Connection lost The server closed the connection的两种方法

    解决nodejs mysql Error: Connection lost The server closed the connection的两种方法_connection lost: the server closed the connection.-CSDN博客


    最近在学习node.js是发现在MySQL连接时出现问题,当过几个小时没有访问的MySQL的时候,MySQL自动断开连接,这个问题的原因是MySQL有一个wait_time当超过这个时间的时候连接会丢失,当你再去请求MySQL的时候会连接不上MySQL服务。先在整理一下解决这两个问题的方法:

    一、先看抛出的异常: 433869b1ba_normal.png

    二、第一中解决方法:当MySQL连接丢失时会抛出一个异常,这个异常的code就是‘PROTOCOL_CONNECTION_LOST’当捕捉的这个异常的时候就执行重新连接,这样就能解决连接丢失的问题:将这个连接封装成全局module,取名为‘mysqlconnection.js’代码如下:

    var mysql = require(mysql);
    var mysql_config = {
        host: 127.0.0.1,
        user:root,
        password:123456,
        database:workstation
    };
    
    function handleDisconnection() {
       var connection = mysql.createConnection(mysql_config);
        connection.connect(function(err) {
            if(err) {
                setTimeout(handleDisconnection(), 2000);
            }
        });
    
        connection.on(error, function(err) {
            logger.error(db error, err);
            if(err.code === PROTOCOL_CONNECTION_LOST) {
                logger.error(db error执行重连:+err.message);
                handleDisconnection();
            } else {
                throw err;
            }
        });
        exports.connection = connection;
    }
    
    exports.handleDisconnection =  handleDisconnection;

    首先将这个连接封装成一个module,然后向外导出连接的方法‘handleDisconnection’和‘connection’;在你需要的地方全局调用handleDisconnection方法,具体不多说了,怕暴露智商,这里要特别注意的是,在使用连接‘connection’的时候,这个‘connection’不能作为全局变量,应该在每一次执行数据请求的时候去获取,不然不能获取到最新的‘connection’。...

    立即注册
    更新于:2024-10-02 23:11:32
    相关内容

    mysql在导入大数据库的时候,报错 Unknown MySQL server host ... ER...

    Call to undefined function mysql_connect() 解决方法汇总

    PHP Error: Maximum execution time of 30 seconds exceeded 解决方案

    php报错 Error: Variable 'sql_mode' can't be set to the value of 'M...

    Mysql错误1366的解决办法:Incorrect string value: '\xF0\x9F...' for ...

    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    人气美女女优百度指数排行榜(波多野结衣,苍井空,三上悠亚,深田咏美,桥本有菜,北条...

    最强人造人深田咏美,业界的社交女王

    人生起起落落的三上悠亚,成名前的清纯风,怎么搭配出来的?

    业内第一大长腿,桥本有菜的腿究竟有多长

    波多野结衣,岛国业界著作最多的超级劳模

    日本AV界NO.1,苍井空是多少宅男的疯狂?

    美女女优视频混剪 This Girl-Laza Morgan

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享