Skip to content

Instantly share code, notes, and snippets.

@dulichan
Last active December 17, 2015 05:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dulichan/62f3d49d1fe40a11b4c7 to your computer and use it in GitHub Desktop.
Save dulichan/62f3d49d1fe40a11b4c7 to your computer and use it in GitHub Desktop.
URL routing component for jaggery
<%
// 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);
%>
<%
//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();
}
%>
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;
})();
@nuwanbando
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment