send
Version:
Better streaming static file server with Range and conditional-GET support
43 lines (36 loc) • 730 B
JavaScript
/**
* Module dependencies.
*/
var crypto = require('crypto');
/**
* Return a weak ETag from the given `path` and `stat`.
*
* @param {String} path
* @param {Object} stat
* @return {String}
* @api private
*/
exports.etag = function etag(path, stat) {
var tag = String(stat.mtime.getTime()) + ':' + String(stat.size) + ':' + path;
var str = crypto
.createHash('md5')
.update(tag, 'utf8')
.digest('base64');
return 'W/"' + str + '"';
};
/**
* decodeURIComponent.
*
* Allows V8 to only deoptimize this fn instead of all
* of send().
*
* @param {String} path
* @api private
*/
exports.decode = function(path){
try {
return decodeURIComponent(path);
} catch (err) {
return -1;
}
};