trying to find out whats causing an occasional crash
[nodejs-repoproxy.git] / lib / router.js
index 71fddb1..626eb5d 100644 (file)
@@ -6,8 +6,13 @@ var path = require("path");
 exports.routeRequest = function(req, res) {
        // first, unify the request
        var thisQuery = unifyRequest(req, res, function(unified) {
-               if(unified.exists) {
-                       if(unified.isFile) {
+               if(unified.requestFor == "/favicon.ico") {
+                       unified.b.writeHead(404, {"Content-Type": "text/plain"});
+                       unified.b.write("404 Not Found\n");
+               } else if(unified.exists) {
+                       if(typeof global.repoproxy.downloads[unified.fullFilePath] != "undefined" && global.repoproxy.downloads[unified.fullFilePath] == 1) {
+                               cache.upstreamRequest(unified);
+                       } else if(unified.isFile) {
                                cache.serviceFile(unified);
                        } else if(unified.isDirectory) {
                                cache.serviceDirectory(unified);
@@ -17,11 +22,7 @@ exports.routeRequest = function(req, res) {
                } else {
                        // it doesnt exist yet, so we send it to the cache service
                        console.log("file doesnt exist, upstream we go: ", unified);
-                       cache.upstreamRequest(unified, function(err) {
-                               if(err == null) {
-                                       cache.watchAndService(unfied);
-                               } // if upstream sends anything other then a 200, cache.upstreamRequest will handle it (i.e. 302, 404, etc)
-                       });
+                       cache.upstreamRequest(unified);
                }
        });
 }
@@ -42,18 +43,10 @@ function unifyRequest(req, res, callback, testing) {
        // create the full file path by spanning the cachedir
        unified.fullFilePath = (global.repoproxy.cacheDir + "/" + originalurl.pathname.replace(/^\/pub/, "")).replace(/\/+/g, "/");
        
-       // determine if the request is for a directory
-       if(unified.requestFor.match(/\/$/) != null) {
-               unified.isDirectoryRequest = true;
-               unified.fullPathDirName = unified.fullFilePath;
-       } else {
-               unified.isDirectoryRequest = false;
-               unified.fullPathDirName = path.dirname(unified.fullFilePath);
-       }
-       
        // determine the topPath, subpath etc.
        var spl = unified.requestFor.split("/");
        unified.topPath = spl[1];
+       unified.topFullPath = (global.repoproxy.cacheDir + "/" + spl[1]).replace(/\/+/g, "/");
        unified.subPath = "";
        if(spl.length > 2) {
                for(var i=2; i < spl.length; i++) {
@@ -64,6 +57,17 @@ function unifyRequest(req, res, callback, testing) {
                unified.subPath = null;
        }
        
+       // determine if the request is for a directory
+       if(unified.requestFor.match(/\/$/) != null) {
+               unified.isDirectoryRequest = true;
+               unified.fullPathDirName = unified.fullFilePath;
+               unified.subPathDirName = unified.subPath;
+       } else {
+               unified.isDirectoryRequest = false;
+               unified.fullPathDirName = path.dirname(unified.fullFilePath);
+               unified.subPathDirName = path.dirname(unified.subPath);
+       }
+       
        
        fs.stat(unified.fullFilePath, function(err, stats) {
                if(err == null) {