tachi
Version:
Node.js MVC framework for seriously rapid application development.
56 lines (39 loc) • 1.34 kB
JavaScript
var fs = require('fs');
module.exports = (function() {
return function ResourceHeaderGenerator(contentTypes, specifyCacheHeaders) {
var fileStats = {};
var setFileSpecificHeaders = function (existingHeaders, specifyCacheHeaders, lastModifiedTime) {
var modified = new Date(lastModifiedTime);
existingHeaders['Last-Modified'] = modified.toString();
if (!specifyCacheHeaders) {
return existingHeaders;
}
var expiresDate = new Date();
expiresDate.setDate(expiresDate.getDate() + 90);
existingHeaders['Expires'] = expiresDate.toString();
existingHeaders['Cache-control'] = 'public,max-age=3153600';
return existingHeaders;
}
return function(path, extension) {
var deferred = new Deferred();
var headers = {};
headers['Content-Type'] = contentTypes[extension];
var stats = fileStats[path];
if (!stats) {
fs.stat(path, function (err, stats) {
if (err) {
deferred.complete(headers);
return;
}
fileStats[path] = stats;
headers = setFileSpecificHeaders(headers, specifyCacheHeaders, stats.mtime);
deferred.complete(headers);
});
return deferred;
}
headers = setFileSpecificHeaders(headers, stats.mtime);
deferred.complete(headers);
return deferred;
};
};
})();