Git Product home page Git Product logo

choreographer's Introduction

Choreographer

Your server is my stage -- dirt simple URL routing for Node.js. Easy to use, easy to understand. Sinatra-style API.

(This only being actively tested Node.js v0.2.0, but there's no reason it wouldn't work on anything else.)

Install

Get npm if you don't already have it, and then just run npm install choreographer.

Usage

Dirt simple:

var http = require('http'),
  router = require('choreographer').router();

router.get('/chatroom/*/messages', function(req, res, room)
{
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('No messages in ' + room + '.\n');
})
.post('/chatroom/*/message', function(req, res, room)
{
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Posted message to ' + room + '.\n');
})
.notFound(function(req, res)
{
  res.writeHead(404, {'Content-Type': 'text/plain'});
  res.end('404: This server is just a skeleton for a chat server.\n' +
    'I\'m afraid ' + req.url + ' cannot be found here.\n');
});

http.createServer(router).listen(80);

You can easily make routes case-insensitive with the optional ignoreCase flag:

router.get('/HelloWorld', true, function(req, res)
{
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello, World!\n');
});

Routes default to case-sensitive without the flag, but you can change that:

//routes defined up until now defaulted to case-sensitive if flag omitted
router.ignoreCase = true;
//routes defined following default to case-insensitive if flag omitted

You can also pass in a regular expression as a route:

router.get(/^\/hw(\d+)$/i, function(req, res, hwNum)
{
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Homework '+hwNum+' isn\'t available yet.\n');
});

There's also put, delete and head, and that's it! That's the entire API, simple and easy to use.

As in Sinatra, routes are first-come, first-serve (only the callback for the first route to be matched by a request is invoked, and routes are matched in the order they are defined). Also as in Sinatra, creating get routes automatically creates head routes.

Notice that router is just an event listener for the request event on http.createServer, so if you want a listener that does more than routing:

http.createServer(function(req, res)
{
  //do middleware stuff before routing
  router.apply(this, arguments);
  //do more stuff
}).listen(80);

Understanding The Code

The code is just as simple: first half is the router, second half is the routes. Lightweight and easy to understand.

The entire architecture is designed around the philosophy of being so simple it obviously has no bugs, rather than so complicated it has no obvious bugs.

Open-Source License

GNU Lesser General Public License

choreographer's People

Contributors

laughinghan avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.