appjs
Version:
AppJS is a SDK on top of nodejs to develop desktop applications using HTML/CSS/JS
64 lines (54 loc) • 1.54 kB
JavaScript
var Response = require('./Response'),
Request = require('./Request'),
decorate = require('../utils').decorate;
var methods = ['get', 'post'];
module.exports = Router;
function Router(emitter){
var self = this;
this.handlers = { all: [] };
for (var i=0; i < methods.length; i++) {
this.handlers[methods[i]] = [];
}
emitter.on('request',function(request, callback){
request = new Request(request);
response = new Response(request, callback);
self.handle(request, response);
});
}
decorate(Router.prototype, [
function handle(request, response){
var listeners = this.handlers[request.method] || [],
index = -1;
void function next(){
if (++index === listeners.length) {
response.send(500, 'Internal Server Error');
} else {
listeners[index](request, response, next);
}
}();
},
function use(middleware){
for (var i=0; i < methods.length; i++) {
this.handlers[methods[i]].push(middleware);
}
return this;
},
function all(route, callback) {
for (var i=0; i < methods.length; i++) {
this[methods[i]](route, callback);
}
return this;
}
]);
methods.forEach(function(method){
Router.prototype[method] = function(route, callback) {
this.handlers[method].push(function(request, response, next){
if (request.method.toLowerCase() === method && request.pathname === route) {
callback(request, response, next);
} else {
next();
}
});
return this;
}
});