README
ampersand-express-router
Serverside backbone router for express 4. Mostly lifted from Backbone.js.
Part of the Ampersand.js toolkit for building severside applications.
install
npm install ampersand-express-router
example
var Router = require('ampersand-express-router');
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
extended: false
}));
// parse application/json
app.use(bodyParser.json());
var UserRouter = Router.extend({
// ------- ROUTES DEFINITIONS ---------
routes: {
'users|post': 'create',
'users|delete': 'destroy',
'users|put': 'edit',
'users|get': 'all',
'users/:id|get': 'show'
},
// ------- BEFORE FILTERS DEFINITIONS ---------
before_filters: {
'users|post': 'beforeCreate',
'users|delete': 'beforeDestroy',
'users|put': 'beforeEdit',
'users|get': 'beforeAll',
'users/:id|get': 'beforeShow'
},
// ------- ROUTE HANDLERS ---------
create: function(request, response) {
response.json({
name: 'create'
});
},
destroy: function(request, response) {
response.json({
name: 'destroy'
});
},
edit: function(request, response) {
response.json({
name: 'edit'
});
},
all: function(request, response) {
response.json({
name: 'all'
});
},
show: function(request, response) {
response.json({
name: request.param('id')
});
},
// ------- BEFORE FILTER HANDLERS ---------
beforeCreate: function(request, response, next) {
request.out = {
name: 'before create'
}
next();
},
beforeDestroy: function(request, response, next) {
request.out = {
name: 'before destroy'
}
next();
},
beforeEdit: function(request, response, next) {
request.out = {
name: 'before edit'
}
next();
},
beforeAll: function(request, response, next) {
request.out = {
name: 'before all'
}
next();
},
beforeShow: function(request, response, next) {
request.out = {
name: 'before show'
}
next();
}
...
});
var UsersRoute = new UserRouter({
app: app
});
app.listen(3000);
API Reference
Router.extend(properties)
extend Get started by creating a custom router class. Define actions that are triggered when certain URL are matched, and provide a routes hash that pairs routes to actions. Note that you'll want to avoid using a leading slash in your route definitions:
var UserRouter = Router.extend({
routes: {
"users|get": "all", // /users
"users/:id|get": "show", // /users/11
},
before_filters: {
"users|get": "all", // this filter will run before /users
"users/:id|get": "show", // this filter will run before /users/11
},
all: function(request,response,next) {
//...
},
show: function(request,response,next) {
//...
},
beforeAll: function(request,response,next) {
//...
next(); //dont forget to call next()
},
beforeShow: function(request,response,next) {
//...
next(); //dont forget to call next()
}
});
router.routes
routers The routes hash maps URLs with parameters to functions on your router. Routes can contain path parameter parts, :param
.
router.before_filters
routers The before filters hash maps URLs with parameters to functions on your router. Route filters can contain path parameter parts, :param
.
new Router([options])
constructor / initialize When creating a new router, you must pass an instance of express application which this router will be mounted into and additional express router options.
Credits
All credit goes to Jeremy Ashkenas and the rest of the Backbone.js authors.
License
MIT