functional
[nodejsws.git] / lib / wsrequest.js
index 80e4d3c..c0bf4d1 100644 (file)
@@ -99,6 +99,9 @@ function urlServicer(request, response, purl) {
        // first resolve the module making the call and determine layout/purl
        var purlClass = layouts;
        var purlLayout = layouts.standard();
+       var mainPath = path.dirname(require.main.filename) + "/purls/";
+
+       console.log("main purl path is ", mainPath);
        
        if(purl.pathname == "/") {
                if(defaultMainPurl == null) {
@@ -108,14 +111,28 @@ function urlServicer(request, response, purl) {
                        // find and load the purl
                }
                
-               if(typeof purlClass.layout == "undefined") {
-                       console.log("set via undefined");
-                       purlLayout = layouts.standard();
-               } else {
-                       // find and resolve the layout
-               }
        } else {
                // handle the purls
+               var newPurlPath = mainPath+"/"+path.basename(purl.pathname.replace(/\/$/, ""))+".js";
+               console.log("attempting to require: ", newPurlPath);
+               try {
+                       var newPurlClass = require(newPurlPath);
+                       purlClass = newPurlClass;
+               } catch(err) {
+                       console.log("tried to load '%s' for request '%s', but this has failed, returning 302 to /", newPurlPath, purl.pathname);
+                       response.writeHead("302", { 'Location': '/' });
+                       response.end();
+                       return;
+               }
+
+       }
+
+       if(typeof purlClass.layout == "undefined") {
+               console.log("set via undefined");
+               purlLayout = layouts.standard();
+       } else {
+               // find and resolve the layout
+               purlLayout = purlClass.layout();
        }
        
        // now we should have a layout and a class
@@ -143,7 +160,7 @@ function serviceLayout(request, response, purlClass, purlLayout) {
                console.log("begin process layout");
                
                if(offset >= splitup.length) {
-                       response.write("end of caller");
+                       //response.write("end of caller");
                        response.end();
                        return;
                } else if(offset == 0) {
@@ -180,12 +197,14 @@ function serviceLayout(request, response, purlClass, purlLayout) {
 
 function resolveAndCall(request, response, caller, purlClass, callback) {
        //response.write("resolving: \"" + caller + "\"");
+       
+       // TODO: do this properly.
        if(typeof purlClass[caller] != "undefined") {
                purlClass[caller](request, response, callback);
-       } else if(typeof purlClass[caller] != "undefined"){
+       } else if(typeof layouts[caller] != "undefined"){
                layouts[caller](request, response, callback);
        } else {
-               response.write("<hr><br>Undefined layout section<br><hr>");
+               response.write("<!-- ERROR:Undefined layout section -->");
                callback();
        }
        //callback();