httputil
Version:
httputil
116 lines (104 loc) • 3.12 kB
JavaScript
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;