nyx_server
Version:
Node内容发布
70 lines (60 loc) • 1.98 kB
JavaScript
/* global Buffer */
/* global __dirname */
/* global process */
var path = require("path");
var Watch = require("../utils/Watch");
var browserSync = require("browser-sync");
var clearRequireCache = require("../utils/ClearNodeRequireCache");
var watch = new Watch();
var workDir = path.join(process.cwd() , "**/*.*");
var executeDir = path.join(__dirname , "../*.*");
var bs = browserSync.create();
bs.init();
watch.addPath([workDir , executeDir] , function(event , path){
if (path.indexOf('.log') >= 0) {
return;
}
clearRequireCache();
bs.reload();
});
var browserSynccode = "<script type='text/javascript' id=\"__bs_script__\">//<![CDATA[\n" +
"document.write(\"<script async src='http://HOST:3000/browser-sync/browser-sync-client.2.10.0.js'><\\\/script>\".replace(\"HOST\", location.hostname));\n" +
"//]]></script>\n";
module.exports = (function (code) {
return function (req, res, next) {
var write = res.write;
var writeHead = res.writeHead;
var end = res.end;
var called;
var buf = '';
var inject_snippet = function(string, encoding) {
if (called) return;
if (string !== undefined) {
var body = string instanceof Buffer ? string.toString(encoding) : string;
buf += body.replace(/<\/body>/, function (w) {
called = true;
return code + w;
});
}
};
res.write = function (string, encoding) {
write.call(res, '', encoding);
inject_snippet(string, encoding);
return true;
};
res.writeHead = function() {
};
res.end = function (string, encoding) {
res.end = end;
res.write = write;
// Restore writeHead
res.writeHead = writeHead;
inject_snippet(string, encoding);
if (buf &&!res._header) {
res.setHeader('content-length', Buffer.byteLength(buf, encoding));
}
end.call(res, buf, encoding);
};
next();
};
})(browserSynccode);