Unmaintained. Free push/npm access to anyone interested.
CoffeeScript Makefile
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.


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')
  .get()(function(err, resp, 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) {

// client's path is back to just "https://api.github.com"

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

  .scope('users/technoweenie', function(cli) {
    var data = JSON.stringify({location: 'SF'})

    // posting data!
    cli.post(data)(function(err, resp, body) {

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

client.post(function (req) {
})(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('');


client.get()(function(err, resp, body) {
  if (err) {
    util.puts("ERROR: " + err);


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

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


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