// Uplink Gemini Server // Router Class function selectRoute(path, routes) { result = -1; console.log(path); var mPathComponents = path.split('/'); routes.forEach((item, index) => { console.log(item); var mitem = item.split('/'); if((mitem.length == mPathComponents.length)) { if((item.indexOf(':') > 0) && (path.endsWith('/') == false)) { console.log('we need parameters'); var mmitem = item.substring(item.indexOf(':')); var mmpath = path.substring(item.indexOf(':')); var mmitemList = mmitem.split('/'); var mmpathList = mmpath.split('/'); if(mmitemList.length == mmpathList.length) { console.log('winner is here'); if(result == -1) result = index; } } else { console.log('we do not need parameters'); if(item == path) { console.log('winnere here'); if(result == -1) result = index; } } } }); return result; } module.exports = class Router { constructor() { this.routes = []; this.handlers = []; } use(route, handler) { this.routes[this.routes.length] = route; this.handlers[this.handlers.length] = handler; this.request = undefined; this.response = undefined; } set(path, request, response) { this.request = request; this.response = response; ///////////////////////////////////// console.log(selectRoute(path, this.routes)); ///////////////////////////////////// var pathComponents = path.split('/'); for (var i = 0; i < pathComponents.length; i++) { pathComponents[i] = '/' + pathComponents[i]; } var routes = this.routes; var paths = []; var params = []; var mindex = selectRoute(path, this.routes); if(mindex == -1) { this.response.error(51); return; } var routeComponents = routes[mindex].split('/'); paths = []; params = []; if (routeComponents.length == pathComponents.length) { for (var k = 0; k < routeComponents.length; k++) { routeComponents[k] = '/' + routeComponents[k]; if (routeComponents[k].startsWith('/:')) { params.push(routeComponents[k]); } else { paths.push(routeComponents[k]); } } } var finalParams = pathComponents.slice(paths.length); for (var l = 0; l < finalParams.length; l++) { finalParams[l] = finalParams[l].substring(1); } var myParams = {}; for (var m = 0; m < params.length; m++) { eval('myParams.' + params[m].substring(2) + ' = "' + JSON.stringify(finalParams[m]).slice(1, -1) + '"'); } this.request.params = myParams; var mm = typeof this.handlers[mindex]; if (mm !== 'undefined') { this.handlers[mindex](this.request, this.response); return; } else { this.response.error(51); return; } } };