f2e-node-server
Version:
a nodejs based file-system-server with easy-template-engine and several F2E-utils
59 lines (55 loc) • 1.57 kB
JavaScript
;
var _ = require("underscore");
var map = {}, hosts = [];
exports.execute = function( req, resp, stats ) {
var k = resp.cdnPath,
source = map[k],
mt = +stats.mtime;
if( !source ){
return false;
}else if( source.mtime < mt ){
return false;
}else{
var t = req.headers["if-modified-since"];
if ( t && new Date(mt).toUTCString() === t ) {
resp.writeHead(304, "Not Modified");
resp.end();
}else{
var conf = resp.util.conf;
var version = resp.util.version;
var expires = new Date();
expires.setTime( expires.getTime() + (conf.expires || 0) );
resp.writeHead(200, {
"Content-Encoding": resp.gzip ? "gzip" : "utf-8",
"Content-Type": req.util.mime.get(k.split("?")[0]),
"Expires": expires.toUTCString(),
"Server": version
});
resp.end( source.data );
}
return true;
}
};
exports.set = function(resp, v, mtime){
var k = resp.cdnPath;
for (var i = 0; i < hosts.length; i++) {
if( k.indexOf(hosts[i]) === 0 ){
return;
}
}
map[ k ] = {
mtime: mtime || +new Date(),
data: v
};
};
exports.disabled = function(host){
hosts.push( host );
map = _.filter(map, function(v,k){
return k.indexOf(k) !== 0;
});
};
exports.enable = function(host){
hosts = _.filter(hosts, function(h){
return h !== host;
});
};