public
Last active

Node.JS static file web server. Put it in your path to fire up servers in any directory, takes an optional port argument.

  • Download Gist
static_server.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
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);
path.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;
}
 
response.writeHead(200);
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");

likewise on the thank you!

Thank you for making this available

This doesn't set the mim type. You can use the mime module like this https://gist.github.com/1926868

Great stuff, exactly what I was looking for.

Thanks for this! :)

Careful! This code is vulnerable to a directory traversal attack.

I'm just using it for a local web preview anyway

I'm just getting started with node.js and backbone.js and this has been perfect for setting up demo apps quickly.

I needed to put up a holding page for a website I was building and this was an awesome lightweight solution... Thanks!

Just what I was looking for. Danke Shoen!

Consider also python -m SimpleHTTPServer 888 or twistd -n web -p 8888 --path .. The former is installed pretty much anywhere where there's Python, the latter is better performing and is bundled with many distributions including Mac OSX - no need for pasting/downloading another file.

Thank you, this rocks!

path.exists should be changed to fs.exists

Nice! I typically use

python -m SimpleHTTPServer

to serve the cwd.

Brilliant solution!

fantastic.... love this!

nice, this totally is the javascript spirit of the python SimpleHTTPServer

I dumped in piping because I was using it to transfer larger files. May be slow... gist

Great example to understand

Wow the first one that works for me thank very much for this code!
Well, it works everywhere except in...surprise: IE11 & <

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.