NodeJS连接MySQL报错 events.js:85 throw er; // Unhandled ‘error‘ event Error: Connection lost:

       公司建了一个网站使用的sqlite+nodejs,最近考虑到把数据库换成MySQL,之前测试都还挺顺利的,后来就正式release到服务器上去了,突然间发现出现了后台崩掉,

       通过读后台的打印信息,如下:

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: Connection lost: The server closed the connection.

后来Google才知道MySQL数据库有一种机制就是node ***.js后默认8小时会自动关闭所有没有关闭的connection,因为我这个网站里面需要大量的查询,所以就将每一次查询就建立连接查询后关闭连接这种方法pass掉,当时也没有想太多,就觉得connection就让它一直保持,因为对这种机制的不熟悉所以才会有这种问题,

处理的方法就是:需要增加connection.on('error',function(err){

                                              if(err.code === 'PROTOCOL_CONNECTION_LOST') {
                                                     reconnection();
                                               }

                                        });

上面的代码在connection关闭时触发reconnection()函数,所有在reconnction()函数内在重新将以一个连接即可

function reconnection(){
        connection = mysql.createConnection({   
        host: "localhost",
        user: "root",
        password: "root",
        database:"logs"
       });
       connection.connect(function(err) {
       if(err){
           throw err;
           setTimeout('reconnection()', 1000);
       }
       });
       connection.on('error', function(err) {
            console.log(err);
            if(err.code === 'PROTOCOL_CONNECTION_LOST') {
                  reconnection();
            }
       });
}

这样的话每隔八小时数据库自动关闭连接的同时又重新建立了新的连接,后台程序不会崩掉了,

为了方便测试,可以登入到数据库,执行show global variables like 'wait_timeout';

mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 3600  |
+---------------+-------+
1 row in set (0.00 sec)
 

然后再执行set global wait_timeout=60;

mysql> set global wait_timeout=60;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 60    |
+---------------+-------+
1 row in set (0.00 sec)

这样我们只需要等1分钟不必等待8小时就可以测试问题是否还会出现!当然时间数字可以自己设定进行测试,单位:秒

哎,心里的石头总算落地了!!

这个错误提示表明,您在尝试从 https://nodejs.org/dist/latest/ 下载 Node.js 安装文件时发生了 i/o 超时错误。这可能是由于网络连接问题、防火墙设置或其他网络配置问题引起的。 以下是一些可能的解决方法: 1. 检查网络连接:网络连接不稳定可能会导致 i/o 超时错误。请确保您的网络连接正常,并尝试重新下载 Node.js 安装文件。 2. 暂时关闭防火墙:如果您的计算机上安装了防火墙软件,请尝试暂时关闭防火墙,并重新下载 Node.js 安装文件。如果此时下载成功,则说明防火墙可能会影响到您的下载过程。 3. 使用代理服务器:如果您无法直接连接 Node.js 官方网站,可以尝试使用代理服务器来下载 Node.js 安装文件。在命令行中设置代理服务器的命令如下: ``` set http_proxy=http://yourproxyaddress:proxyport set https_proxy=http://yourproxyaddress:proxyport ``` 4. 手动下载 SHASUMS256.txt 文件:如果无法下载 SHASUMS256.txt 文件,您可以手动下载该文件并将其放置在正确的位置。您可以从 Node.js 的官方网站中下载 SHASUMS256.txt 文件,然后将其放置在您正在下载 Node.js 安装文件的目录中。 5. 尝试使用其他下载方式:如果您无法从官方网站下载 Node.js 安装文件,可以尝试使用其他下载方式,例如使用国内的下载镜像站点来下载 Node.js 安装文件。 希望这些方法能够帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值