Skip to content

Instantly share code, notes, and snippets.

@michelc
Last active December 7, 2016 15:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save michelc/d0e6e7991cb1a8f8714ca9278619aae9 to your computer and use it in GitHub Desktop.
Save michelc/d0e6e7991cb1a8f8714ca9278619aae9 to your computer and use it in GitHub Desktop.
Node.JS static file web server
// Node.JS static file web server
// ------------------------------
// Created from https://gist.github.com/ryanflorence/701407
var http = require("http")
, url = require("url")
, path = require("path")
, fs = require("fs")
, port = process.argv[2] || 8888;
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname
, filename = path.join(process.cwd(), uri);
if (!fs.existsSync(filename))
filename += '.html';
fs.exists(filename, function(exists) {
if (!exists) {
response.writeHead(404, { "Content-Type": "text/plain" });
response.write("404 Not Found\n");
response.end();
return;
}
if (fs.statSync(filename).isDirectory())
filename += '/index.html';
fs.readFile(filename, "binary", function(err, file) {
if (err) {
response.writeHead(500, { "Content-Type": "text/plain" });
response.write(err + "\n");
response.end();
return;
}
var mimes = {
css: "text/css",
gif: "image/gif",
html: "text/html",
ico: "image/x-ico",
jpg: "image/jpeg",
js: "application/javascript",
pdf: "application/pdf",
png: "image/png",
txt: "text/plain",
xml: "application/xml"
}
, extension = filename.replace(/.*[\.\/\\]/, '').toLowerCase()
, mime = mimes[extension];
console.log("- " + filename + " (" + mime + ")");
if (typeof mime === "undefined")
response.writeHead(200);
else
response.writeHead(200, { "Content-Type": mime });
response.write(file, "binary");
response.end();
});
});
}).listen(parseInt(port, 10));
console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment