Skip to content

technoweenie/node-scoped-http-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

119 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scoped HTTP Client for Node.js

Node.js's HTTP client is great, but a little too low level for common purposes. It's common practice for some libraries to extract this out so it's a bit nicer to work with.

function(method, path, customHeaders, body, callback) { var client = http.createClient(url) client.request(method, path, headers) // ... }

I hate functions with lots of optional arguments. Let's turn that into:

var scopedClient = require('./lib') , util = require('util') var client = scopedClient.create('https://api.github.com') .header('accept', 'application/json') .path('user/show/technoweenie') .get()(function(err, resp, body) { util.puts(body) })

You can scope a client to make requests with certain parameters without affecting the main client instance:

client.path('https://api.github.com') // reset path client.scope('users/technoweenie', function(cli) { // cli's path is "https://api.github.com/users/technoweenie" cli.get()(function(err, resp, body) { util.puts(body) }) }) // client's path is back to just "https://api.github.com"

You can use .post(), .put(), .del(), and .head().

client.query({login:'technoweenie',token:'...'}) .scope('users/technoweenie', function(cli) { var data = JSON.stringify({location: 'SF'}) // posting data! cli.post(data)(function(err, resp, body) { util.puts(body) }) })

Sometimes you want to stream the request body to the server. The request is a standard http.clientRequest.

client.post(function (req) { req.write("...") req.write("...") })(function(err, resp, body) { // ... })

And other times, you want to stream the response from the server. Simply listen for the request's response event yourself and omit the response callback.

client.get(function (err, req) { // do your own thing req.addListener('response', function (resp) { resp.addListener('data', function (chunk) { util.puts("CHUNK: " + chunk) }) }) })()

Basic HTTP authentication is supported:

client.get(function (err, req) { // we'll keep this conversation secret... req.auth('technoweenie', '...') })

Adding simple timeout support:

client = ScopedClient.create('http://10.255.255.1:9999'); client.timeout(100); client.get()(function(err, resp, body) { if (err) { util.puts("ERROR: " + err); } }); 

Development

Run this in the main directory to compile coffeescript to javascript as you go:

$ coffee -wc -o lib --no-wrap src/**/*.coffee 

Copyright

Copyright (c) 2014 rick. See LICENSE for details.

About

Unmaintained. Free push/npm access to anyone interested.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors