UNPKG

not-modified

Version:
47 lines (37 loc) 1.17 kB
var crypto = require('crypto'); var fs = require('fs'); function notModified(req, res, mtime) { var etag = (mtime - 0).toString(16); return notModified.compare(req, res, etag); } notModified.compare = function(req, res, etag) { res.setHeader('ETag', '"' + etag + '"'); var ifnonematch = req.headers['if-none-match']; if (ifnonematch && ifnonematch.indexOf(etag) != -1) { res.statusCode = 304; return true; } return false; }; notModified.ex = function(req, res, files, data, cb) { if (!files) { files = []; } else if (files.constructor == String) { files = [files]; } var hash = crypto.createHash('md5'); files.map(function(file) { hash.update(notModified.fileHash(file)); }); data && hash.update(JSON.stringify(data), 'utf8'); var etag = hash.digest('hex'); cb(null, notModified.compare(req, res, etag)); }; notModified.fileHash = function(file) { if (notModified.fileHashCache[file]) return notModified.fileHashCache[file]; notModified.fileHashCache[file] = crypto.createHash('md5').update(fs.readFileSync(file)).digest(); return notModified.fileHashCache[file]; }; notModified.fileHashCache = {}; module.exports = notModified;