goldilocks.js/lib/app.js

65 lines
1.6 KiB
JavaScript
Raw Normal View History

2015-06-24 21:36:17 +00:00
'use strict';
module.exports = function (opts) {
var finalhandler = require('finalhandler');
var serveStatic = require('serve-static');
var serveIndex = require('serve-index');
var serve = serveStatic(opts.public);
var index = serveIndex(opts.public);
2015-06-30 23:11:01 +00:00
var content = opts.content;
2015-06-24 21:36:17 +00:00
function _reloadWrite(data, enc, cb) {
/*jshint validthis: true */
if (this.headersSent) {
this.__write(data, enc, cb);
return;
}
if (!/html/i.test(this.getHeader('Content-Type'))) {
this.__write(data, enc, cb);
return;
}
if (this.getHeader('Content-Length')) {
this.setHeader('Content-Length', this.getHeader('Content-Length') + this.__my_addLen);
}
this.__write(this.__my_livereload);
this.__write(data, enc, cb);
}
2015-06-24 21:36:17 +00:00
return function (req, res) {
2015-06-30 23:11:01 +00:00
if (content && '/' === req.url) {
// res.setHeader('Content-Type', 'application/octet-stream');
res.end(content);
return;
}
2015-06-24 21:36:17 +00:00
var done = finalhandler(req, res);
2015-12-06 06:43:33 +00:00
if (opts.livereload) {
res.__my_livereload = '<script src="//'
2015-12-06 06:43:33 +00:00
+ (res.getHeader('Host') || opts.servername).split(':')[0]
+ ':35729/livereload.js?snipver=1"></script>';
res.__my_addLen = res.__my_livereload.length;
2015-12-06 06:43:33 +00:00
// TODO modify prototype instead of each instance?
res.__write = res.write;
res.write = _reloadWrite;
}
2016-08-06 20:15:12 +00:00
function serveStatic() {
serve(req, res, function (err) {
2016-08-06 18:34:15 +00:00
if (err) { return done(err); }
2016-08-06 20:15:12 +00:00
index(req, res, done);
2016-08-06 18:34:15 +00:00
});
2016-08-06 20:15:12 +00:00
}
if (opts.expressApp) {
opts.expressApp(req, res, serveStatic);
}
else {
serveStatic();
}
2015-06-24 21:36:17 +00:00
};
};