Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Routing for Express and Compound
tree: 384f578e90

Fetching latest commit…

Cannot retrieve the latest commit at this time

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

README.md

Description

This is simple routing for ExpressJS framework. It allows you to write routes in Ruby on rails 2 style.

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

Docs

http://railwayjs.com/routing.html

Singleton resources

To create a singleton resource, set the singleton_for property of the params hash to the resource you want the singleton resource to map to.

Example usage:

map.resources('users');
map.resources('account', { 
  singleton_for: 'users', 
  middleware: function(req, res, next) {
    // Set the id parameter since we don't get it from the URL
    // like is usually the case for normal resources.
    if(req.user)
      req.params.id = req.user.id;
    else 
      return res.redirect('/login');
    next(); 
}});

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.