Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Routing for Express and Compound
JavaScript
tree: c40b98654c

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
examples/singleton
lib
support
test
.gitignore
.travis.yml
CHANGELOG.md
Makefile
README.md
package.json

README.md

Description

This is simple routing for ExpressJS framework. It allows you to write resourceful routes.

Using with Express

After creating app instead of writing code like app.get('smth', doSmth); generate routes like that:

var map = new require('railway-routes').Map(app, handler);
map.resources('posts');
map.namespace('admin', function (admin) {
   admin.resources('users');
});

In this example handler function will called immediately for each route, accepting three args: ns, controller, action and should return method which will me actually called to server request.

For example you have two controllers: posts and admin/users which looks like regular modules:

controllers/posts_controller.js

exports.show = function (req, res) {
    res.send('show');
};

exports.edit = function (req, res) {
    res.send('edit');
};

exports.destroy = function (req, res) {
    res.send('destroy');
};

...

same for controllers/admin/users_controller.js

In that case your handler should be:

function handler(ns, controller, action) {
    try {
        var ctlFile = './controllers/' + ns + controller + '_controller';
        var responseHandler =  require(ctlFile)[action];
    } catch(e) {}
    return responseHandler || function (req, res) {
        res.send('Handler not found for ' + ns + controller + '#' + action);
    };
}

Features

  • resourceful routes
  • generic routes
  • url helpers
  • namespaces
  • custom helper names / paths for resources
  • named parameters in url helpers

Docs

http://compoundjs.com/docs/#routing

Named route params

Example:

map.get('/test/:param1/:param2', 'controller#action');
map.pathTo.test({param1: 'foo', param2: 'bar'}); // '/test/foo/bar'

Singleton resources

Example:

map.resource('account');

Will generate the following routes:

GET     /account        account#show
POST    /account        account#create
GET     /account/new    account#new
GET     /account/edit   account#edit
DELETE  /account        account#destroy
PUT     /account        account#update

Singleton resources can also have nested resources. For example:

map.resource('account', function(account) {
  account.resources('posts');
});

Example app

Check out example app to deal with middleware, route handling, and generic routes:

git clone git://github.com/anatoliychakkaev/railway-routes-example-app.git
cd railway-routes-example-app
npm install
node app.js
Something went wrong with that request. Please try again.