mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
Lazily connect mysql node
If there is a mysqldatabase config node, but no actual users of it, we don't need to connect to the database.
This commit is contained in:
parent
39b849ded8
commit
34b3c635f3
@ -61,6 +61,10 @@ function MySQLNode(n) {
|
|||||||
RED.nodes.createNode(this,n);
|
RED.nodes.createNode(this,n);
|
||||||
this.host = n.host;
|
this.host = n.host;
|
||||||
this.port = n.port;
|
this.port = n.port;
|
||||||
|
|
||||||
|
this.connected = false;
|
||||||
|
this.connecting = false;
|
||||||
|
|
||||||
if (n.user) {
|
if (n.user) {
|
||||||
var credentials = {};
|
var credentials = {};
|
||||||
credentials.user = n.user;
|
credentials.user = n.user;
|
||||||
@ -80,6 +84,7 @@ function MySQLNode(n) {
|
|||||||
var node = this;
|
var node = this;
|
||||||
|
|
||||||
function doConnect() {
|
function doConnect() {
|
||||||
|
node.connecting = true;
|
||||||
node.connection = mysqldb.createConnection({
|
node.connection = mysqldb.createConnection({
|
||||||
host : node.host,
|
host : node.host,
|
||||||
port : node.port,
|
port : node.port,
|
||||||
@ -90,13 +95,17 @@ function MySQLNode(n) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
node.connection.connect(function(err) {
|
node.connection.connect(function(err) {
|
||||||
|
node.connecting = false;
|
||||||
if (err) {
|
if (err) {
|
||||||
node.warn("mysql: "+err);
|
node.warn(err);
|
||||||
node.tick = setTimeout(doConnect, reconnect);
|
node.tick = setTimeout(doConnect, reconnect);
|
||||||
|
} else {
|
||||||
|
node.connected = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
node.connection.on('error', function(err) {
|
node.connection.on('error', function(err) {
|
||||||
|
node.connected = false;
|
||||||
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
|
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
|
||||||
doConnect(); // silently reconnect...
|
doConnect(); // silently reconnect...
|
||||||
} else {
|
} else {
|
||||||
@ -105,13 +114,20 @@ function MySQLNode(n) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
doConnect();
|
|
||||||
|
|
||||||
node.on('close', function () {
|
this.connect = function() {
|
||||||
if (node.tick) { clearTimeout(node.tick); }
|
if (!this.connected && !this.connecting) {
|
||||||
|
doConnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.on('close', function () {
|
||||||
|
if (this.tick) { clearTimeout(this.tick); }
|
||||||
|
if (this.connection) {
|
||||||
node.connection.end(function(err) {
|
node.connection.end(function(err) {
|
||||||
if (err) node.error(err);
|
if (err) node.error(err);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
RED.nodes.registerType("MySQLdatabase",MySQLNode);
|
RED.nodes.registerType("MySQLdatabase",MySQLNode);
|
||||||
@ -123,6 +139,7 @@ function MysqlDBNodeIn(n) {
|
|||||||
this.mydbConfig = RED.nodes.getNode(this.mydb);
|
this.mydbConfig = RED.nodes.getNode(this.mydb);
|
||||||
|
|
||||||
if (this.mydbConfig) {
|
if (this.mydbConfig) {
|
||||||
|
this.mydbConfig.connect();
|
||||||
var node = this;
|
var node = this;
|
||||||
node.on("input", function(msg) {
|
node.on("input", function(msg) {
|
||||||
if (typeof msg.topic === 'string') {
|
if (typeof msg.topic === 'string') {
|
||||||
|
Loading…
Reference in New Issue
Block a user