http = require 'http'
https = require 'https'
url = require 'url'
Server = http.Server
dependencies
http = require 'http'
https = require 'https'
url = require 'url'
Server = http.Server
settings
global.__fluentnode ?= {}
global.__fluentnode.http ?= {}
using global.__fluentnode.http, ->
@.HTTP_GET_TIMEOUT = 500
@.HTTP_GET_DELAY = 10
String::http_GET = (callback) ->
url = url.parse(@.str())
engine = if url.protocol is 'https:' then https else http
req = engine.get @.str(), (res) ->
data = '';
res.on 'data', (chunk) -> data += chunk
res.on 'end' , ( ) -> callback null, data, res
req.on 'error',(err ) ->
if callback
callback err, null, null
req
@.http_GET (callback)
Makes a GET request to @ and callback with data (i.e. string representation of requested url)
String::GET = (callback) ->
@.http_GET (error, data, res)-> callback(data)
@.GET_Json
Makes a GET request to @ and JSON parses the html data received
Will throw an error if the returned data is not a valid JSON objec
Twin methods: json_GET
String::GET_Json = (callback) ->
@.http_GET (error, data, res)->
if data
callback(data.json_Parse())
else
callback {}
String::json_GET = String::GET_Json
@.json_GET_With_Timeout
Makes a GET request (with a 500ms wait for valid data), and JSON parses the html data received
String::json_GET_With_Timeout = (callback)->
@.http_GET_With_Timeout (data)->
if data
callback data.json_Parse()
else
callback {}
@.http_GET_Wait_For_Null
Waits until a GET request to @ results null (or empty)
This is a good util method to check when servers go offline
String::http_GET_Wait_For_Null = (callback)->
timeout = global.__fluentnode.http.HTTP_GET_TIMEOUT
delay = global.__fluentnode.http.HTTP_GET_DELAY
attempts = ~~(timeout/delay)
try_Http_Get = (next) =>
@.GET (data) =>
if data
next.invoke_In(delay)
else
callback(null)
run_Tests = (count)=>
if count
try_Http_Get ()->
run_Tests(count-1)
else
callback new Error("[http_GET_Wait_For_Null] never got a null from server #{@} after #{attempts} attempts")
run_Tests(attempts)
String::http_GET_With_Timeout = (callback)->
timeout = global.__fluentnode.http.HTTP_GET_TIMEOUT
delay = global.__fluentnode.http.HTTP_GET_DELAY
attempts = ~~(timeout/delay)
try_Http_Get = (next) =>
@.GET (data) =>
if data
callback(data)
else
(delay).invoke_After(next)
run_Tests = (count)=>
if count
try_Http_Get ()->
run_Tests(count-1)
else
callback null
run_Tests attempts