flowHttp
Treat node.js http(s) as a simple duplex stream

Install
npm install flowhttp
Usage
Get the flowHttp module:
var flowHttp = require('flowhttp');
The flowHttp module exposes 4 basic functions, each corresponding to the
standard HTTP REST verbs:
flowHttp.get(options): Perform a GET request
flowHttp.post(options): Perform a POST request
flowHttp.put(options): Perform a PUT request
flowHttp.del(options): Perform a DELETE request
flowHttp(options): An alias for the flowHttp.get(options) function
The options argument is identical to the first argument of the
http.request()
method in core, but basically options can be an object or a string. If
options is a string, it is automatically parsed with
url.parse().
For details see the
http.request()
documentation.
FlowHttp handles both HTTP and HTTPS transparently.
Request & response
Each of the 4 basic functions available on the flowHttp module returns a
duplex stream. This makes it very easy to read data from any request and
optionally write data to a POST or PUT request.
var stream = flowHttp('http://example.com');
Events
- response:
function (response) {} - Get access to the raw http.IncomingMessage reponse object. This is emitted before any data or end event. You would normally not need to listen for this event unless you need to acceess the response headers or status code
- data:
function (chunk) {} - Emitted for each chunk of the reponse body
- end:
function () {} - Emitted when the entire reponse have been received
- error:
function (err) {} - If an error occurs during the request/reponse cycle, you will get notified here
API
Besides the normal methods avaliable on a duplex stream, the following API from
http.ClientRequest
have been made available:
.setHeader(name, value)
.getHeader(name)
.removeHeader(name)
Examples
A dead simple GET request piped to STDOUT:
flowHttp('http://example.com').pipe(process.stdout);
Same as above by listening to the emitted events:
var body = '';
var req = flowHttp('http://example.com')
.on('response', function (res) {
if (res.headers['some-header'] !== 'some-expected-value')
req.abort();
})
.on('data', function (chunk) {
body += chunk;
})
.on('end', function () {
console.log(body);
});
Upload a picture by piping it through a simple POST request and outputting the
response to STDOUT:
fs.createReadableStream('./picture.jpg')
.pipe(flowHttp.post('http://example.com'))
.pipe(process.stdout);
POST data to the remote server and pipe the response to STDOUT:
var req = flowHttp.put('http://example.com');
req.pipe(process.stdout);
req.write('data to be sent to the server');
red.end();
License
MIT