app-routes

Convention based routes with before action/filter for express.js

app-routes

Route mapping kinda like Rails

npm install app-routes
var appRoutes   = require('app-routes')(__dirname),
    match       = appRoutes.match,
    resources   = appRoutes.resources,
    root        = appRoutes.root;
 
var routes = {
    drawfunction (app) {
        root(app, 'home#index');
 
        // alias 
        match(app, 'get', 'signup', 'users#create');
 
        // standard REST actions 
        resources(app, 'users');
    }
};
 
module.exports = routes;
var express         = require('express'),
    app             = express(),
    routes          = require('./config/routes');
...
routes.draw(app);
var _   = require('underscore'),
    Foo = require('../models/foo');
 
var fooController = {
 
    // add middleware 
    beforeActions: [
        { filter: authorize },
        { filter: findFoo, only: ['update'] }
    ],
 
    indexfunction (reqresnext) {
        res.json([]);
    },
 
    updatefunction (reqresnext) {
        var foo = fooParams(req);
 
        Foo.findByIdAndUpdate(req.params.id, foo, function (errdoc) {
            if (err) return next(err);
 
            res.json(doc);
        });
    }
};
 
function authorize (reqresnext) {
    // find user by some token/cookie/header 
    if (!cool) {
        return next(new Error('not cool'));
    }
 
    next();
};
 
function findFoo () {
    Foo.findById(req.params.id, function (errdoc) {
        if (err) return next(err);
 
        req.foo = doc;
        next();
    });
};
 
// whitelist values from client (like Rails 4) 
function fooParams (req) {
    return _.pick(req.body, 'bar', 'baz');
};
 
module.exports = fooController;