You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.6 KiB
76 lines
1.6 KiB
|
|
/*! |
|
* Connect - favicon |
|
* Copyright(c) 2010 Sencha Inc. |
|
* Copyright(c) 2011 TJ Holowaychuk |
|
* MIT Licensed |
|
*/ |
|
|
|
/** |
|
* Module dependencies. |
|
*/ |
|
|
|
var fs = require('fs') |
|
, utils = require('../utils'); |
|
|
|
/** |
|
* Favicon cache. |
|
*/ |
|
|
|
var icon; |
|
|
|
/** |
|
* By default serves the connect favicon, or the favicon |
|
* located by the given `path`. |
|
* |
|
* Options: |
|
* |
|
* - `maxAge` cache-control max-age directive, defaulting to 1 day |
|
* |
|
* Examples: |
|
* |
|
* connect.createServer( |
|
* connect.favicon() |
|
* ); |
|
* |
|
* connect.createServer( |
|
* connect.favicon(__dirname + '/public/favicon.ico') |
|
* ); |
|
* |
|
* @param {String} path |
|
* @param {Object} options |
|
* @return {Function} |
|
* @api public |
|
*/ |
|
|
|
module.exports = function favicon(path, options){ |
|
var options = options || {} |
|
, path = path || __dirname + '/../public/favicon.ico' |
|
, maxAge = options.maxAge || 86400000; |
|
|
|
return function favicon(req, res, next){ |
|
if ('/favicon.ico' == req.url) { |
|
if (icon) { |
|
res.writeHead(200, icon.headers); |
|
res.end(icon.body); |
|
} else { |
|
fs.readFile(path, function(err, buf){ |
|
if (err) return next(err); |
|
icon = { |
|
headers: { |
|
'Content-Type': 'image/x-icon' |
|
, 'Content-Length': buf.length |
|
, 'ETag': '"' + utils.md5(buf) + '"' |
|
, 'Cache-Control': 'public, max-age=' + (maxAge / 1000) |
|
}, |
|
body: buf |
|
}; |
|
res.writeHead(200, icon.headers); |
|
res.end(icon.body); |
|
}); |
|
} |
|
} else { |
|
next(); |
|
} |
|
}; |
|
}; |