mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	Improve HTTP response handling and error reporting (#419)
Improve HTTP response handling and error reporting of emoncms node
This commit is contained in:
		
				
					committed by
					
						 Dave Conway-Jones
						Dave Conway-Jones
					
				
			
			
				
	
			
			
			
						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); | ||||||
|                         if (msg.payload.success) { |  | ||||||
|                             node.status({fill:"green",shape:"dot",text:"Success"}); |  | ||||||
|                         } else { |  | ||||||
|                             msg.warning = "ERROR: API Call Failed"; |  | ||||||
|                             msg.payload.urlsent = decodeURIComponent(URIsent); |  | ||||||
|                             node.error(msg); |  | ||||||
|                             node.status({fill:"red",shape:"ring",text:"Failed"}); |  | ||||||
|                         } |  | ||||||
|                     } |                     } | ||||||
|                     catch(err) { |                     catch (e) {  | ||||||
|                         msg.warning = "ERROR: Http response" |                         msg.payload = body; | ||||||
|                         node.warn(msg); |                     } | ||||||
|                         node.status({fill:"red",shape:"ring",text:"http issue"}); |  | ||||||
|  |                     if (msg.payload.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 { | ||||||
|  |                         msg.warning = "ERROR: API Call Failed"; | ||||||
|  |                         node.error(msg); | ||||||
|  |                         node.status({fill:"red",shape:"ring",text:"API Failed RC="+ msg.rc}); | ||||||
|                     } |                     } | ||||||
|                 }); |                 }); | ||||||
|             }).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" | ||||||
|  |       } | ||||||
|     ] |     ] | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user