use new response module for assets

unfortunately we can't use stream pipes because we need to generate
a hash of the content for the Etag.

I think proper caching (i.e. Etag) is very important
This commit is contained in:
jomo 2015-04-22 00:06:10 +02:00
parent 2e66e5c794
commit 69f0ee23be

View File

@ -18,20 +18,20 @@ var routes = {
capes: require("./routes/capes")
};
function asset_request(req, res) {
// serves assets from lib/public
function asset_request(req, callback) {
var filename = path.join(__dirname, "public", req.url.path_list.join("/"));
fs.exists(filename, function(exists) {
if (exists) {
res.writeHead(200, {
"Content-type": mime.lookup(filename),
"Cache-Control": "max-age=7200, public", // cache for 2 hours
fs.readFile(filename, function(err, data) {
callback({
body: data,
type: mime.lookup(filename),
err: err
});
});
fs.createReadStream(filename).pipe(res);
} else {
res.writeHead(404, {
"Content-type": "text/plain"
});
res.end("Not Found");
callback({});
}
});
}
@ -95,7 +95,9 @@ function requestHandler(req, res) {
});
break;
default:
asset_request(req, res);
asset_request(req, function(result) {
response(req, res, result);
});
}
} catch(e) {
var error = JSON.stringify(req.headers) + "\n" + e.stack;