Giter Site home page Giter Site logo

rainbow's Introduction

Rainbow

简体中文

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.

Installation

$ npm install rainbow

Usage

In your express application main file app.js:

var express = require('express');
var rainbow = require('rainbow');

var app = express();

// Here using Rainbow to initialize all routers
rainbow.route(app);

app.listen(6060);

Controllers

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:

exports.get = function (req, res, next) {
	res.send(200, '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:

exports.get = function (req, res, next) {
	res.send(200, 'Simple getting.');
};
// add filters
exports.get.filters = ['authorization'];

Also you could define other HTTP methods handlers, but make sure in one file each URL! Example in controllers/user.js:

exports.get = function (req, res, next) {
	User.find({where: req.query.name}).success(function (user) {
		res.send(200, user);
	});
};

exports.put = function (req, res, next) {
	User.create(req.body).success(function (user) {
		res.send(201, user.id);
	});
};

// 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:

module.exports = function (req, res, next) {
	// all your process
};

Params

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:

exports.get = function (req, res, next) {
	var id = req.params.id;
	// your business
};

exports.get.params = ':id?';

Or you can use regular expression also:

exports.get = function (req, res, next) {
	console.log(req.params);
}

exports.get.params = /(\d+)(?:\.\.(\d+))?/;

But make sure no regular expression ^ used as starter and $ as ender, or rainbow could not resolve the expression correctly.

Filters

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 GET http://yourapp:6060/something:

module.exports = function (req, res, next) {
	console.log('processing authorization...');
	var session = req.session;
	
	if (session.userId) {
		console.log('user(%d) in session', session.userId);
		next();
	} else {
		console.log('out of session');
		// Async filter is ok with express!
		db.User.find().success(function (user) {
			if (!user) {
				res.send(403);
				res.end();
			}
		});
	}
};

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.

Change default path

Controllers and filters default path could be changed by passing a path config object to route function when initializing:

rainbow.route(app, {
	controllers: '/your/controllers/path',
	filters: '/your/filters/path'
});

These paths are all RELATIVE to your app path!

Troubleshooting

  1. Gmail me: mytharcher
  2. Write a issue
  3. Send your pull request to me.

MIT Licensed

-EOF-

rainbow's People

Contributors

mytharcher avatar

Watchers

亦才 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.