Express router middleware for RESTful API base on certain folder path
A node Express router middleware for Ajax RESTful API base on certain folder path.
Rainbow mapping all HTTP request route to controllers folder each as path to file as URL.
$ npm install rainbow
In your express application main file
var express = require'express';var rainbow = require'rainbow';var app = express;// Here using Rainbow to initialize all routersrainbowrouteapp;applisten6060;
All your controllers for catching HTTP request should be defined in each file in
controllers/ folder (could be changed) as same path in URL.
This is the core design for Rainbow! And it makes routing much simpler only by files' paths!
Here writes a router
something.js in your
controllers/ folder like this:
ressend200 'Simple getting.';;
If you need some filters, just add a
filters array property which contains your filters in
filters/ folder to the handle function like this:
ressend200 'Simple getting.';;// add filtersexportsgetfilters = 'authorization';
Also you could define other HTTP methods handlers, but make sure in one file each URL! Example in
Userfindwhere: reqquerynamesuccessressend200 user;;;Usercreatereqbodysuccessressend201 userid;;;// You can also define `post` and `delete` handlers.// ...
If you want all methods to be process in only one controller(something not RESTful), just make exports to be the handle function:
// all your process;
You can write controllers with coffeescript using
.coffee in example
=Userfindwhere: reqquerynamesuccessressend 200user=Usercreatereqbodysuccessressend 201userid
Rainbow started to support param form URL from version 0.1.0. Now you can define your controllers URL with params resolved by native Express like this:
var id = reqparamsid;// your business;exportsgetparams = ':id?';
Or you can use regular expression also:
console.logreqparams;exportsgetparams = /?/;
But make sure no regular expression
^ used as starter and
$ as ender, or rainbow could not resolve the expression correctly.
Make sure the filters you need had been defined in
filters/ folder (could be changed) as same module name, because them will be required when initilizing. Here
authorization.js is a example for intecepting by non-authenticated user before
console.log'processing authorization...';var session = reqsession;if sessionuserIdconsole.log'user(%d) in session' sessionuserId;next;elseconsole.log'out of session';// Async filter is ok with express!dbUserfindsuccessif !userressend403;resend;;;
You could see filters is as same as a origin router in Express, just be put together in
filters/ folder to be interceptors like in Java SSH.
Controllers and filters default path could be changed by passing a path config object to
route function when initializing:
rainbowrouteappcontrollers: '/your/controllers/path'filters: '/your/filters/path';
These paths are all RELATIVE to your app path!