【问题标题】:Node.js MySQL connection with timer and error handling带有计时器和错误处理的 Node.js MySQL 连接
【发布时间】:2019-10-28 11:31:35
【问题描述】:

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

  1. 每 3 秒检查一次 MySQL 数据库并获取状态
  2. 即使 Internet 连接丢失或 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);
 }
}

【问题讨论】:

    标签: mysql node.js


    【解决方案1】:

    你能从我的回购https://github.com/MathewJohn1414/node-mysql-quickstart中检查这个代码吗? .它使用 MySQL 连接池,连接错误也得到处理。

    【讨论】:

      【解决方案2】:

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

          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();
                          });
                      }
                  });
              });
          }
      

      【讨论】:

        猜你喜欢
        • 2018-10-18
        • 2020-02-07
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 2013-05-07
        • 2012-04-08
        • 2018-02-16
        • 2021-07-13
        相关资源
        最近更新 更多