Node JS mysql 数据库断开连接

2023-12-10

我正在使用 Node JS,并尝试连接到 mysql 数据库。由于超时,它不断断开连接,因此我编写了一个函数,以便在超时时重新连接。尽管我需要它成为连续连接,否则我的代码中的引用将不起作用。这是我的相关代码:

var mysql = require('mysql');
var connection = mysql.createConnection({
    host     : '.........', // MySQL Host
    user     : '.........', // MySQL User
    password : '.........', // MySQL Password
    database : '.........' // MySQL Databse
});

// MYSQL INFO

//connection.connect();

function replaceClientOnDisconnect(connection) {
  connection.on("error", function (err) {
    if (!err.fatal) {
      console.log('Databse Error, error not fatal');
      return;
    }

    if (err.code !== "PROTOCOL_CONNECTION_LOST") {
      throw err;
      console.log('PROTOCOL_CONNECTION_LOST Error: Reconnecting to database...');
    }

    setTimeout(function () {
        connection.destroy();
        connection = mysql.createConnection(connection.config);
        replaceClientOnDisconnect(connection);
        connection.connect(function (error) {
          if (error) {
            process.exit(1);
          } else {
              console.log('Reconnected to database!');
          }
    }, 1000); // 1 sec
    });
  });
}

// And run this on every connection as soon as it is created.
replaceClientOnDisconnect(connection);

您可以使用示例

var dbConfig = {
        host: '----',
        user: '----',
        password: '----',
        database: '----',
        port: ----
    };

var connection;
function handleDisconnect() {
    connection = mysql.createConnection(dbConfig);  // Recreate the connection, since the old one cannot be reused.
    connection.connect( function onConnect(err) {   // The server is either down
        if (err) {                                  // or restarting (takes a while sometimes).
            console.log('error when connecting to db:', err);
            setTimeout(handleDisconnect, 10000);    // We introduce a delay before attempting to reconnect,
        }                                           // to avoid a hot loop, and to allow our node script to
    });                                             // process asynchronous requests in the meantime.
                                                    // If you're also serving http, display a 503 error.
    connection.on('error', function onError(err) {
        console.log('db error', err);
        if (err.code == 'PROTOCOL_CONNECTION_LOST') {   // Connection to the MySQL server is usually
            handleDisconnect();                         // lost due to either server restart, or a
        } else {                                        // connnection idle timeout (the wait_timeout
            throw err;                                  // server variable configures this)
        }
    });
}
handleDisconnect();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node JS mysql 数据库断开连接 的相关文章

随机推荐

  • 是否可以删除 JInternalFrame 中的小下拉箭头?

    我正在使用一个JInternalFrame我想删除框架左上角的下拉菜单 因为它没有任何作用 我已经禁用了可调整大小 可关闭等 我没有看到此属性 并且我不想删除整个标题栏 因为标题是必要的 我在网上查了一下 基本上都是空的 我希望这是我刚刚忽
  • 如何在android中的一个应用程序中将多个应用程序类放在单独的jar中

    我有一个从 Application 扩展并在清单中调用 App 的 Ap 类 还有另外两个 jar 每个作者都说在清单中将它们称为应用程序标记 根据android中如何处理多个应用程序类问题 要拥有从 Application 扩展的多个应用
  • 记住我系统的基础知识

    我正在使用 PHP MySQL 登录系统 我想在其中添加一个 记住我 记住我 的基本机制是什么 它是否涉及向 MySQL 中存储所有用户信息的表添加新列等 提前致谢 John There are a few different method
  • 访问 google-people API 时无法访问我的个人资料数据

    我想在我的项目中实施 Google Oauth2 我的主要目标是访问 google people API 以显示个人资料信息和 google 驱动器 因为我是新手 所以我激活了几个 API 并且大多数时候都成功获取了信息 只有 People
  • 当浏览器模式为IE9时,如何从JS中检测到IE10?

    尽管浏览器模式设置不同 但当浏览器为 IE10 时 我需要仅使用纯 JavaScript 无框架 进行检测 一些评论 我确实需要检测浏览器 它不是仅检测功能的选项 因为目的是减少浏览器错误 我尝试了常见的方法 例如 UA 字符串或功能检测
  • 当我更改数据库时,我如何知道需要删除哪些内容并将其读入 Visual Studio 中的 LinqToSql O/R 设计器?

    例如 我将表中的一列从 null 更改为 not null 然后我需要删除并重新添加该表 这部分很清楚 访问表 尤其是表中的列 的视图 函数和存储过程又如何呢 我尝试对 SQLMetal 生成的文件运行差异 取得了一些有限的成功 但即使如此
  • 为什么不能使用 Task<>.Result 属性?

    我的任务有问题 当我尝试从任务中接收返回的变量时 我无法使用 Result 属性来获取它 这是我的代码 var nextElement dir GetValue i ToString Task buffering Task
  • 如何通过 ResourceBundle 在资源属性中使用 UTF-8

    我需要在使用 Java 的资源属性中使用 UTF 8ResourceBundle 当我将文本直接输入属性文件时 它显示为 mojibake 我的应用程序在 Google App Engine 上运行 谁能给我举个例子吗 我无法完成这项工作
  • psych::principal - 旋转(主要)组件的顺序和命名的解释

    Let x是一个样本数据框 set seed 0 x lt replicate 4 rnorm 10 PCA 使用principal函数从psych包将产生 gt principal x nf 4 rotate none PC1 PC2 P
  • 如何移动 OpenLayers.Layer.Markers 图层中的标记?

    如何以编程方式移动现有标记OpenLayers Layer Markers层 我似乎找不到合适的方法 这完全受支持吗 或者我必须使用Vector layer The marker moveTo 函数对我不起作用 我有纬度 经度坐标 如果您有
  • GoogleMaps MapView 在 Android 中点击时崩溃?

    我目前正在编写一个显示 MapView 的应用程序 其中显示谷歌地图 我使用了 你好地图视图 教程http developer android com resources tutorials views hello mapview html
  • 如何在Android中询问相机的运行时权限,运行时存储权限

    我正在开发一个应用程序 只需单击按钮即可扫描条形码 并且它在 Lollipop 版本上运行良好 当我来到棉花糖时它就停止工作了 这是错误 camerabase 连接到相机 0 时发生错误 它迫使我通过以下方式打开权限 设置 gt 应用程序
  • 在 InterfaceBuilder 中调整 NavigationController 的大小

    这可能是一个愚蠢的问题 但是有没有办法调整故事板中导航控制器的大小 它只是占用了太多的屏幕空间 我的大多数视图都是大小合适的弹出窗口 但旁边有一个巨大的 iPad 大小的导航控制器 这纯粹是为了 Interface Builder 中的视觉
  • java.sql.Timestamp 时区是否特定?

    我必须将 UTC 日期时间存储在数据库中 我已将特定时区中给出的日期时间转换为 UTC 为此 我遵循了以下代码 我输入的日期时间是 20121225 10 00 00 Z 时区是 亚洲 加尔各答 我的服务器 数据库 oracle 在同一时区
  • 如何在Python字符串中包含反斜杠和引号[重复]

    这个问题在这里已经有答案了 我有一系列特殊字符 看起来像这样 specialCharList lt gt 问题是 我想包含 和 字符 但不能包含 因为它们用于字符串和转义 我该如何加入这些角色 反斜杠 字符用于转义具有特殊含义的字符 例如换
  • 违反德米特定律的搜索工具? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有人知道我可以在 C 应用程序中使用一个工具来查找可能违反德米特法则的情况吗 我知道它会产生很多误报 但我认为它仍然有用 尤其是在早期设计过程中 如果你只是在寻找something
  • 从 Spark-Scala UDF 返回 Seq[Row]

    我正在使用 Spark 和 Scala 来进行一些数据处理 我将 XML 数据映射到数据帧 我将 Row 作为参数传递给 UDF 并尝试将两个复杂类型对象提取为列表 Spark 给我以下错误 线程 main 中的异常 java lang U
  • IBM Cloud Watson Assistant:如何获取工作区的 ID

    我使用 IBM Cloud Watson Assistant 制作了一个聊天机器人 我需要在我的 Android 应用程序中使用它 这是我的config xml code
  • 错误:supportsScrollBehavior 未声明为可配置

    我正在尝试监视一个函数supportsScrollBehavior有角的platform服务如下 import as platform from angular cdk platform describe Supporting Scroll
  • Node JS mysql 数据库断开连接

    我正在使用 Node JS 并尝试连接到 mysql 数据库 由于超时 它不断断开连接 因此我编写了一个函数 以便在超时时重新连接 尽管我需要它成为连续连接 否则我的代码中的引用将不起作用 这是我的相关代码 var mysql requir