mysql - 带计时器和错误处理的 Node.js MySQL 连接

标签 mysql node.js

我有一个基本的 node.js 应用程序作为 RaspPi 上的服务运行。 应该有两个重要的问题:

  1. 每 3 秒检查一次 MySQL 数据库并获取状态
  2. 即使互联网连接丢失或 MySQL 服务器停止等也永远不会抛出。

此代码运行良好,但如果 MySQL 服务器停止,应用程序将关闭并抛出错误。即使出现任何类型的错误,它也需要运行。 (无需登录并获取错误类型) 并且;这种每 3 秒连接一次的算法对于性能是否正确?

var mysql = require('mysql');
var con = mysql.createConnection({
host: "192.168.1.100",
user: "test",
password: "test",
database: "test"
});

var Gpio = require('onoff').Gpio;
var LED = new Gpio(4, 'out'); //use GPIO pin 4
var getStatus = setInterval(checkStatus, 3000);

function checkStatus() {
 try
 {
  con.connect(function(err) {
  //if (err) throw err;
  con.query("SELECT device_status FROM Device_Status WHERE 
  device_id='device01'", function (err, result, fields) {
  if (err)
    {
        //console.log(err);
    }
  else
    {
        //console.log(result[0].device_status);
        if(result[0].device_status == "1")
        {
            LED.writeSync(1);
        }
        else
        {
            LED.writeSync(0);
        }
    }
 });
 });

 }
 catch(err){ //console.log(err);
 }
}

最佳答案

您是否考虑过池化连接?然后您将连接每个查询。

    connect() {
        return new Promise((resolve, reject) => {
            pool = mysql.createPool({
                connectionLimit: 10,
                host     : this.host,
                user     : this.user,
                password : this.password,
                database : this.database
            });
            resolve(pool);
        });
    }

然后你会像这样搜索:

    search(collection, searchStr) {
        return new Promise((resolve, reject) => {
            pool.getConnection((err, connection) => {
                if (err) {
                    resolve(err);
                } else {
                    var sql = "SELECT * FROM " + collection
                    if (searchStr)
                        sql += " WHERE " + searchStr;
                    connection.query(sql, (err, result) => {
                        if (err) reject(err);
                        resolve(result);
                        connection.release();
                    });
                }
            });
        });
    }

关于mysql - 带计时器和错误处理的 Node.js MySQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56587821/

相关文章:

php - 如何在mysql连接失败时打开缓存?

mysql - 可以始终隐藏表的子集吗?

mysql - 新的 MySQL 服务器比旧的慢

javascript - 从 browserify 包加载 JS 依赖项

javascript - webpack 和在同构包中使用 Node 模块

node.js - 无法使用nodejs订阅Pusher channel

node.js - 如何在 npm 运行时设置 Windows 控制台的标题?

javascript - mongodb 日期 蒙古死牛肉

php - MySQL SELECT 排序问题

mysql - 如何将 HeidiSQL(或类似的 MySQL 管理器)与托管数据库一起使用