-
-
Save dulichan/62f3d49d1fe40a11b4c7 to your computer and use it in GitHub Desktop.
URL routing component for jaggery
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<% | |
// Temporarly including dbconnection | |
include("/model/dbcon.jag"); | |
var log = new Log(); | |
var Router = require('router.js').Router; | |
var jbj = new Router('/MDMServer1.1/'); | |
jbj.route('users/{userid}|GET',function(ctx){ | |
var result = db.query("select * from Users where id="+ctx.userid); | |
if(result[0]!=null){ | |
response.content = result[0]; | |
response.status = 200; | |
}else{ | |
response.status = 404; | |
} | |
}); | |
jbj.route('users/{userid}/groups|PUT',function(ctx){ | |
db.query("DELETE FROM UserGroups where user_id="+ctx.userid); | |
for (var i = 0; i < ctx.groups.length; i++) { | |
var group = ctx.groups[i]+""; | |
db.query("INSERT INTO UserGroups(user_id, group_id) VALUES("+ctx.userid+","+group+")"); | |
} | |
response.status = 200; | |
print("User assigned Successfully"); | |
}); | |
//Process all the routes against the current request | |
jbj.process(request); | |
%> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<% | |
//The Coffeeshop example | |
include("../model/orderQuery.jag"); | |
response.contentType = 'text/javascript'; | |
var verb = request.getMethod(); | |
var orderid = request.getParameter('orderid'); | |
var order = request.getParameter('order'); | |
var status = request.getParameter('status'); | |
var addition = request.getParameter('addition'); | |
var data = request.getContent(); | |
var log = new Log(); | |
var uri = request.getRequestURI(); | |
uri = uri.substring(request.getContextPath().length); | |
if(uri != null) { | |
var uriMatcher = new URIMatcher(uri); | |
if(uriMatcher.match("/orders/{orderid}/{page}")) { | |
orderid = uriMatcher.elements().orderid; | |
} | |
if(uriMatcher.match("/orders/{orderid}/")) { | |
orderid = uriMatcher.elements().orderid; | |
} | |
} | |
if(data != "") { | |
data = parse(data); | |
if(data.addition) { | |
addition = data.addition; | |
} | |
if(data.status) { | |
status = data.status; | |
} | |
} | |
if(verb == "DELETE" && orderid != null) { | |
deleteOrder(orderid); | |
} else if(verb == "GET" && orderid != null && addition == null && status == null) { | |
viewOrder(orderid); | |
} else if(verb == "PUT" && orderid != null && addition != null) { | |
addAddition(orderid, addition); | |
} else if(verb == "PUT" && orderid != null && status != null) { | |
updateStatus(orderid, status); | |
} else if(verb == "POST" && order != null) { | |
addOrder(order); | |
} else if(verb == "GET") { | |
listAllOrders(); | |
} | |
%> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Router = (function () { | |
var context; | |
// constructor | |
var routes = new Array(); | |
var module = function (ctx) { | |
log.info("Jally Context- "+ctx); | |
context=ctx; | |
}; | |
function routeOverload(route){ | |
return context+route; | |
} | |
function mergeRecursive(obj1, obj2) { | |
for (var p in obj2) { | |
try { | |
// Property in destination object set; update its value. | |
if ( obj2[p].constructor==Object ) { | |
obj1[p] = MergeRecursive(obj1[p], obj2[p]); | |
} else { | |
obj1[p] = obj2[p]; | |
} | |
} catch(e) { | |
// Property in destination object not set; create it and set its value. | |
obj1[p] = obj2[p]; | |
} | |
} | |
return obj1; | |
} | |
// prototype | |
module.prototype = { | |
constructor: module, | |
route: function (route, action) { | |
//contains VERB and the route | |
routes.push({route:routeOverload(route),action:action}); | |
}, | |
process: function(request){ | |
for (var i = 0; i < routes.length; i++) { | |
var routeObject = routes[i]; | |
var routeAction = routeObject.action; | |
var routeVariables = routeObject.route.split("|"); | |
var route = routeVariables[0]; | |
var verb = routeVariables[1]; | |
var uriMatcher = new URIMatcher(request.getRequestURI()); | |
// log.info(route); | |
if(uriMatcher.match(route)&&request.getMethod()==verb){ | |
var elements = uriMatcher.elements(); | |
var ctx = elements; | |
log.info("Jally Verb -"+verb); | |
log.info("Jally Route -"+route); | |
if(verb!='GET'){ | |
var jResult = request.getContent(); | |
log.info("Jally data - "+jResult); | |
log.info('Jally String parameters -'+request.getAllParameters()); | |
try{ | |
jResult = parse(jResult); | |
}catch(err){ | |
jResult = request.getAllParameters(); | |
} | |
ctx = mergeRecursive(ctx, jResult); | |
} | |
routeAction(ctx); | |
} | |
} | |
} | |
}; | |
// return module | |
return module; | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is good. but we need to register the routs first. so once the request comes it directly hits the registered function. we need to do some work at app deployment level