mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
Improve HTTP response handling and error reporting (#419)
Improve HTTP response handling and error reporting of emoncms node
This commit is contained in:
parent
9ea27f94ef
commit
cf48039427
@ -58,6 +58,7 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
node.error("ERROR : No valid data type set - " + this.datatype);
|
node.error("ERROR : No valid data type set - " + this.datatype);
|
||||||
|
node.status({fill:"red",shape:"ring",text:"No valid data type set"});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ module.exports = function(RED) {
|
|||||||
|
|
||||||
// check for a time object and setup URI if valid
|
// check for a time object and setup URI if valid
|
||||||
if (typeof msg.time === "undefined") {
|
if (typeof msg.time === "undefined") {
|
||||||
node.warn("WARN: Time object undefined, no time set");
|
// node.warn("WARN: Time object undefined, no time set");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!isNaN(msg.time)) {
|
if (!isNaN(msg.time)) {
|
||||||
@ -84,7 +85,7 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (isNaN(Date.parse(msg.time))) {
|
if (isNaN(Date.parse(msg.time))) {
|
||||||
// error condition
|
// error condition as msg.tme has some value that is not understood
|
||||||
node.warn("WARN: Time object not valid, no time set - " + msg.time);
|
node.warn("WARN: Time object not valid, no time set - " + msg.time);
|
||||||
} else {
|
} else {
|
||||||
this.url += '&time=' + Date.parse(msg.time)/1000; //seconds
|
this.url += '&time=' + Date.parse(msg.time)/1000; //seconds
|
||||||
@ -94,34 +95,52 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
var URIsent = this.url;
|
var URIsent = this.url;
|
||||||
|
|
||||||
http.get(this.url, function(res) {
|
msg.payload = "";
|
||||||
|
msg.urlsent = decodeURIComponent(URIsent);
|
||||||
|
|
||||||
|
var request = http.get(this.url, function(res) {
|
||||||
msg.topic = "http response";
|
msg.topic = "http response";
|
||||||
msg.rc = res.statusCode;
|
msg.rc = res.statusCode;
|
||||||
msg.payload = "";
|
|
||||||
res.setEncoding('utf8');
|
res.setEncoding('utf8');
|
||||||
|
var body = "";
|
||||||
|
|
||||||
res.on('data', function(chunk) {
|
res.on('data', function(chunk) {
|
||||||
msg.payload += chunk;
|
body += chunk;
|
||||||
});
|
});
|
||||||
res.on('end', function() { //A 200 StatusCode does not mean data input sucess
|
|
||||||
|
res.on('end', function() {
|
||||||
|
// need to test for JSON as some responses are not valid JSON
|
||||||
try {
|
try {
|
||||||
msg.payload = JSON.parse(msg.payload);
|
msg.payload = JSON.parse(body);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
msg.payload = body;
|
||||||
|
}
|
||||||
|
|
||||||
if (msg.payload.success) {
|
if (msg.payload.success) {
|
||||||
node.status({fill:"green",shape:"dot",text:"Success"});
|
node.status({fill:"green",shape:"dot",text:"Success RC="+ msg.rc});
|
||||||
|
}
|
||||||
|
else if (msg.payload === 'ok') {
|
||||||
|
node.status({fill:"green",shape:"dot",text:"ok RC="+ msg.rc});
|
||||||
|
}
|
||||||
|
else if (msg.payload === 'Invalid API key') {
|
||||||
|
node.error(msg);
|
||||||
|
node.status({fill:"red",shape:"ring",text:"Invalid API key RC="+ msg.rc});
|
||||||
} else {
|
} else {
|
||||||
msg.warning = "ERROR: API Call Failed";
|
msg.warning = "ERROR: API Call Failed";
|
||||||
msg.payload.urlsent = decodeURIComponent(URIsent);
|
|
||||||
node.error(msg);
|
node.error(msg);
|
||||||
node.status({fill:"red",shape:"ring",text:"Failed"});
|
node.status({fill:"red",shape:"ring",text:"API Failed RC="+ msg.rc});
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
msg.warning = "ERROR: Http response"
|
|
||||||
node.warn(msg);
|
|
||||||
node.status({fill:"red",shape:"ring",text:"http issue"});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}).on('error', function(e) {
|
}).on('error', function(e) {
|
||||||
|
msg.warning = e
|
||||||
|
node.error(msg);
|
||||||
node.error(e,msg);
|
node.error(e,msg);
|
||||||
|
node.status({fill:"red",shape:"dot",text:"HTTP Error"});
|
||||||
|
});
|
||||||
|
request.setTimeout(1000, function() {
|
||||||
|
node.error("timeout: " + msg);
|
||||||
|
node.status({fill:"red",shape:"ring",text:"HTTP Timeout"});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name" : "node-red-node-emoncms",
|
"name" : "node-red-node-emoncms",
|
||||||
"version" : "0.1.0",
|
"version" : "0.2.0",
|
||||||
"description" : "A Node-RED node to fetch/post data to/from emoncms",
|
"description" : "A Node-RED node to fetch/post data to/from emoncms",
|
||||||
"dependencies" : {
|
"dependencies" : {
|
||||||
},
|
},
|
||||||
@ -32,6 +32,10 @@
|
|||||||
{
|
{
|
||||||
"name": "Glyn Hudson",
|
"name": "Glyn Hudson",
|
||||||
"email": "glyn.hudson@openenergymonitor.org"
|
"email": "glyn.hudson@openenergymonitor.org"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "borpin",
|
||||||
|
"email": "brian.orpin@gmail.com"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user