/*****************************************
* Router
*****************************************
* Author: mikael.lofjard@gmail.com
* Website: http://lofjard.se
* License: MIT License
****************************************/
var
Router = (
function
() {
url = require(
'url'
);
path = require(
'path'
querystring = require(
'querystring'
env = require(
'./environmentManager'
).EnvironmentManager;
cm = require(
'./cacheManager'
).CacheManager;
responseManager = require(
'./responseManager'
).ResponseManager;
trimSlashRegEx =
new
RegExp(
'[/]+
,
'g'
resolveExcludes = [
'.html'
'.js'
'.css'
'.png'
'.jpg'
'.gif'
'.ico'
'.txt'
];
routeTable = {};
buildRouteTable(routes) {
for
(
route
in
routes) {
console.log(
'Router: Building route table entry for: '
+ route);
handle = routes[route];
routeSplit = route.split(
'/\{'
pathName = routeSplit[0];
regexRoute =
RegExp(route.replace(/{\w+}/g,
'{(\\w+)}'
) +
'
''
regexPath =
'^'
+ route.replace(/{\w+}/g,
'([^\/]+)'
routeTable[route] = {
handle : handle,
pathName : pathName,
regexRoute : regexRoute,
regexPath : regexPath
}
return
;
{
init:
(routes) {
buildRouteTable(routes);
},
route:
(request, response) {
pathName = url.parse(request.url).pathname;
if
(resolveExcludes.indexOf(path.extname(pathName)) === -1) {
lastSlashPos = pathName.lastIndexOf(
"/"
((lastSlashPos > 0) && (lastSlashPos === pathName.length - 1)) {
pathName = pathName.replace(trimSlashRegEx,
env.info(
'Router: About to route a request for '
+ pathName);
cachedResponse = cm.fetch(pathName);
(cachedResponse !==
null
) {
responseManager.writeCachedResponse(response, pathName);
else
routeTable) {
(routeTable[route].regexPath.test(pathName)) {
attributes = routeTable[route].regexRoute.exec(route);
values = routeTable[route].regexPath.exec(pathName);
request.params = {};
(attributes.length > 1) {
i = 1; i < attributes.length; i++){
request.params[attributes[i]] = decodeURIComponent(values[i]);
routeTable[route].handle(request, response);
'Router: Unhandled request for '
// default 404
response.writeHead(404);
response.write(
"404 Not found."
)
response.end();
//routeTable.defaultFileRoute.handle(request, response);
};
}());
typeof
(exports) !=
'undefined'
? exports.Router = Router :
/*****************************************
* Router
*****************************************
* Author: mikael.lofjard@gmail.com
* Website: http://lofjard.se
* License: MIT License
****************************************/
var
Router = (
function
() {
var
url = require(
'url'
);
var
path = require(
'path'
);
var
querystring = require(
'querystring'
);
var
env = require(
'./environmentManager'
).EnvironmentManager;
var
cm = require(
'./cacheManager'
).CacheManager;
var
responseManager = require(
'./responseManager'
).ResponseManager;
var
trimSlashRegEx =
new
RegExp(
'[/]+
,
'g'
);
var
resolveExcludes = [
'.html'
,
'.js'
,
'.css'
,
'.png'
,
'.jpg'
,
'.gif'
,
'.ico'
,
'.txt'
];
var
routeTable = {};
function
buildRouteTable(routes) {
for
(
var
route
in
routes) {
console.log(
'Router: Building route table entry for: '
+ route);
var
handle = routes[route];
var
routeSplit = route.split(
'/\{'
);
var
pathName = routeSplit[0];
var
regexRoute =
new
RegExp(route.replace(/{\w+}/g,
'{(\\w+)}'
) +
'
,
''
);
var
regexPath =
new
RegExp(
'^'
+ route.replace(/{\w+}/g,
'([^\/]+)'
) +
'
,
''
);
routeTable[route] = {
handle : handle,
pathName : pathName,
regexRoute : regexRoute,
regexPath : regexPath
}
}
return
;
}
return
{
init:
function
(routes) {
buildRouteTable(routes);
},
route:
function
(request, response) {
var
pathName = url.parse(request.url).pathname;
if
(resolveExcludes.indexOf(path.extname(pathName)) === -1) {
var
lastSlashPos = pathName.lastIndexOf(
"/"
);
if
((lastSlashPos > 0) && (lastSlashPos === pathName.length - 1)) {
pathName = pathName.replace(trimSlashRegEx,
''
);
}
env.info(
'Router: About to route a request for '
+ pathName);
var
cachedResponse = cm.fetch(pathName);
if
(cachedResponse !==
null
) {
responseManager.writeCachedResponse(response, pathName);
return
;
}
else
{
for
(
var
route
in
routeTable) {
if
(routeTable[route].regexPath.test(pathName)) {
var
attributes = routeTable[route].regexRoute.exec(route);
var
values = routeTable[route].regexPath.exec(pathName);
request.params = {};
if
(attributes.length > 1) {
for
(
var
i = 1; i < attributes.length; i++){
request.params[attributes[i]] = decodeURIComponent(values[i]);
}
}
routeTable[route].handle(request, response);
return
;
}
}
}
}
env.info(
'Router: Unhandled request for '
+ pathName);
// default 404
response.writeHead(404);
response.write(
"404 Not found."
)
response.end();
return
;
//routeTable.defaultFileRoute.handle(request, response);
}
};
}());
typeof
(exports) !=
'undefined'
? exports.Router = Router :
null
;