我有一个基本的 node.js 应用程序作为 RaspPi 上的服务运行。 应该有两个重要的问题:
- 每 3 秒检查一次 MySQL 数据库并获取状态
- 即使互联网连接丢失或 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/