UNPKG

httputil

Version:

httputil

116 lines (104 loc) 3.12 kB
var http= require("http"); var HttpUtil = function(){ var namespace = { TimeoutGet: function(options, timeout, callback){ var timer=null; var req = null; var hasCallBackCalled =false; // set timeout, it will cancel the request if there is a timeout if(timeout && timeout > 0){ timer = setTimeout(function(){ if(req!=null) req.abort(); if(!hasCallBackCalled && callback){ hasCallBackCalled=true; var errObj = new HttpResult(true, "Request Timeout!", null, 500); callback(errObj); } }, timeout); } req = http.get(options, function(res){ var chunks=""; res.on("data", function(chunk){ chunks+=chunk; }); res.on("end", function(){ clearTimeout(timer); var data =chunks; if(!hasCallBackCalled && callback){ hasCallBackCalled=true; var errObj = new HttpResult(false, null, data, res.statusCode); callback(errObj); } }); }).on("error", function(e){ clearTimeout(timer); if(!hasCallBackCalled && callback){ hasCallBackCalled=true; var errObj = new HttpResult(true, e.message, null, 500); callback(errObj); } }); }, TimeoutPost: function(options, postData, timeout, callback){ var timer=null, req = null, hasCallBackCalled =false; // set timeout, it will cancel the request if there is a timeout if(timeout && timeout > 0){ timer = setTimeout(function(){ if(req != null) req.abort(); if(!hasCallBackCalled && callback){ hasCallBackCalled=true; var errObj = new HttpResult(true, "Request Timeout!", null, 500); callback(errObj); } }, timeout); } req= http.request(options, function(res){ //res.setEncoding('utf-8'); var data = ''; res.on('data',function(chunk){ data += chunk; }); res.on('end',function(){ clearTimeout(timer); if(!hasCallBackCalled && callback){ hasCallBackCalled=true; var errObj = new HttpResult(false, null, data, res.statusCode); callback(errObj); } }); }).on('error',function(e){ clearTimeout(timer); if(!hasCallBackCalled && callback){ hasCallBackCalled=true; var errObj = new HttpResult(true, e.message, null, 500); callback(errObj); } }); req.write(postData); }, Get:function(options, callback){ namespace.TimeoutGet(options, 0, callback); }, Post:function(options, postData, callback){ namespace.TimeoutPost(options, postData, 0, callback); } }; return namespace; }(); /* HttpResult is the object when finished the request. hasError: Indicate whether there is an error when performing a request. errorMessage: If hasError is true, you can get error message here. data: If there is no error, you can get the data from the request. */ function HttpResult(hasError, errorMessage, data, statusCode){ this.hasError=hasError; this.errorMessage = errorMessage; this.data=data; this.statusCode = statusCode; } /*Export the function to public*/ module.exports = HttpUtil;