A router and http client - without unnecessary additions, modifications, or complications
JavaScript
Pull request Compare This branch is even with mixu:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
client.js
index.js
package.json
readme.md
router.js

readme.md

Minimal

Minimal implementations of common functionality, with sane APIs.

Client

Usage example:

var client = require('client');

// GET
client
  .get('http://localhost/foo')
  .data({ abc: 'def' }) // encoded into query string
  .end(function(err, data) {
    console.log(data);
  });

// POST
client
  .post('http://localhost/foo')
  .data({ abc: 'def' }) // encoded as JSON
  .end(function(err, data) {
    console.log(data);
  });

// pipe to file
var ws = fs.createWriteStream('./google.txt');
client
  .get('http://google.com')
  .pipe(ws, function(err) {
    if(err) throw err;
  });

Router

Usage example:

var fs = require('fs'),
    http = require('http'),
    Router = require('router');

var app = new Router();

// basic GET route
app.get(new RegExp('^/users/(.+)$'), function(req, res, match) {
  // match: result from running RegExp.exec() on the currently matching route
  // e.g: /users/123  [ '/users/123', '123' ]
  var id = match[1];
  console.log(id);
});

// serving a static file
app.get(new RegExp('^/static/(.+)$'), function(req, res, match) {
  fs.createReadStream('./static/'+match[1]).pipe(res);
});

// parsing POST params
app.post(new RegExp('^/users/(.+)$'), app.parse(function(req, res, match, data) {
  console.log(data);
}));

// piping a PUT to a file
app.put(new RegExp('^/file/(.+)$'), function(req, res) {
    req.pipe(fs.createWriteStream('./static/'+match[1]));
  });

// invoking Router.route(req, res):

var server = http.createServer();

server.on('request', function(req, res) {
  // returns false if no route matched, allowing you to chain apis
  if(!api.route(req, res)) {
    console.log('No route found', req.url);
    res.end();
  }
}).listen(8080, 'localhost');