Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Simple web server in Node.js. This fork added mime types for common file types.
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs")
port = process.argv[2] || 8888,
mimeTypes = {
"html": "text/html",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"svg": "image/svg+xml",
"json": "application/json",
"js": "text/javascript",
"css": "text/css"
};
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname,
filename = path.join(process.cwd(), uri);
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 mimeType = mimeTypes[filename.split('.').pop()];
if (!mimeType) {
mimeType = 'text/plain';
}
response.writeHead(200, { "Content-Type": mimeType });
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");
@Anindya007

This comment has been minimized.

Copy link

@Anindya007 Anindya007 commented May 28, 2018

Thank you.Works like charm

@NFavareto

This comment has been minimized.

Copy link

@NFavareto NFavareto commented Jul 3, 2018

WOW! THANKS

@abhigyansingh

This comment has been minimized.

Copy link

@abhigyansingh abhigyansingh commented Aug 30, 2018

Implemented a single page server along the lines however got msg that "main.css sent with mime type text/html"
I solved it by modifying as res.writeHead(200, { "Content-Type": ${mimeType} });
Posting it if it helps.

@joycejoyce

This comment has been minimized.

Copy link

@joycejoyce joycejoyce commented Apr 6, 2020

Thanks! It worked perfectly.

@oxk4r01

This comment has been minimized.

Copy link

@oxk4r01 oxk4r01 commented Jun 1, 2020

Hi. Could somebody explain lines #31 an #46? Whats the point of using the "binary" encoding there?

@aolde

This comment has been minimized.

Copy link
Owner Author

@aolde aolde commented Jun 2, 2020

@oxk4r01 I think since we are dealing with files of different encoding, text, image, etc, it makes sense to read the file in the raw binary format. Also, we are not interested in actually parsing and understand the file content - just passing it to the response stream.

The code can probably be optimised with using file streams instead.

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