Skip to content

Instantly share code, notes, and snippets.

Last active October 30, 2023 01:48
Star You must be signed in to star a gist
What would you like to do?
Node.JS static file web server. Put it in your path to fire up servers in any directory, takes an optional port argument.
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");
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.write(file, "binary");
}).listen(parseInt(port, 10));
console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown");
Copy link

unsaved commented Mar 19, 2020

This is insecure, someone can request /../../../etc/shadow or similar to read any file they want.

I guess you're not familiar with how path.join works, because as coded here it won't resolve to a directory outside of cwd directory branch.

Copy link

rpivo commented Apr 12, 2021

fs.exists is deprecated. fs.statSync can be used to check if file path exists, as in dkebler's code above.

Copy link

Thank you for this!

Copy link

Incredible article, thanks for sharing it! I think this article will also be useful for you - Node js vs Python.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment