Skip to content

Instantly share code, notes, and snippets.

@markandey
Created April 14, 2016 23:30
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 markandey/adbcada3292b84f55b37d5fd3892ebe5 to your computer and use it in GitHub Desktop.
Save markandey/adbcada3292b84f55b37d5fd3892ebe5 to your computer and use it in GitHub Desktop.
host.js
var http = require('http');
var url = require('url');
var fs = require('fs');
// borrowed from ry who stole it from jack- thanks
// https://github.com/ry/node_chat/blob/master/fu.js
var mime = {
// returns MIME type for extension, or fallback, or octet-steam
lookupExtension: function(ext, fallback) {
return mime.TYPES[ext.toLowerCase()] || fallback || 'application/octet-stream';
},
// List of most common mime-types, stolen from Rack.
TYPES: {
".3gp": "video/3gpp",
".a": "application/octet-stream",
".ai": "application/postscript",
".aif": "audio/x-aiff",
".aiff": "audio/x-aiff",
".asc": "application/pgp-signature",
".asf": "video/x-ms-asf",
".asm": "text/x-asm",
".asx": "video/x-ms-asf",
".atom": "application/atom+xml",
".au": "audio/basic",
".avi": "video/x-msvideo",
".bat": "application/x-msdownload",
".bin": "application/octet-stream",
".bmp": "image/bmp",
".bz2": "application/x-bzip2",
".c": "text/x-c",
".cab": "application/vnd.ms-cab-compressed",
".cc": "text/x-c",
".chm": "application/vnd.ms-htmlhelp",
".class": "application/octet-stream",
".com": "application/x-msdownload",
".conf": "text/plain",
".cpp": "text/x-c",
".crt": "application/x-x509-ca-cert",
".css": "text/css",
".csv": "text/csv",
".cxx": "text/x-c",
".deb": "application/x-debian-package",
".der": "application/x-x509-ca-cert",
".diff": "text/x-diff",
".djv": "image/vnd.djvu",
".djvu": "image/vnd.djvu",
".dll": "application/x-msdownload",
".dmg": "application/octet-stream",
".doc": "application/msword",
".dot": "application/msword",
".dtd": "application/xml-dtd",
".dvi": "application/x-dvi",
".ear": "application/java-archive",
".eml": "message/rfc822",
".eps": "application/postscript",
".exe": "application/x-msdownload",
".f": "text/x-fortran",
".f77": "text/x-fortran",
".f90": "text/x-fortran",
".flv": "video/x-flv",
".for": "text/x-fortran",
".gem": "application/octet-stream",
".gemspec": "text/x-script.ruby",
".gif": "image/gif",
".gz": "application/x-gzip",
".h": "text/x-c",
".hh": "text/x-c",
".htm": "text/html",
".html": "text/html",
".ico": "image/vnd.microsoft.icon",
".ics": "text/calendar",
".ifb": "text/calendar",
".iso": "application/octet-stream",
".jar": "application/java-archive",
".java": "text/x-java-source",
".jnlp": "application/x-java-jnlp-file",
".jpeg": "image/jpeg",
".jpg": "image/jpeg",
".js": "application/javascript",
".json": "application/json",
".log": "text/plain",
".m3u": "audio/x-mpegurl",
".m4v": "video/mp4",
".man": "text/troff",
".mathml": "application/mathml+xml",
".mbox": "application/mbox",
".mdoc": "text/troff",
".me": "text/troff",
".mid": "audio/midi",
".midi": "audio/midi",
".mime": "message/rfc822",
".mml": "application/mathml+xml",
".mng": "video/x-mng",
".mov": "video/quicktime",
".mp3": "audio/mpeg",
".mp4": "video/mp4",
".mp4v": "video/mp4",
".mpeg": "video/mpeg",
".mpg": "video/mpeg",
".ms": "text/troff",
".msi": "application/x-msdownload",
".odp": "application/vnd.oasis.opendocument.presentation",
".ods": "application/vnd.oasis.opendocument.spreadsheet",
".odt": "application/vnd.oasis.opendocument.text",
".ogg": "application/ogg",
".p": "text/x-pascal",
".pas": "text/x-pascal",
".pbm": "image/x-portable-bitmap",
".pdf": "application/pdf",
".pem": "application/x-x509-ca-cert",
".pgm": "image/x-portable-graymap",
".pgp": "application/pgp-encrypted",
".pkg": "application/octet-stream",
".pl": "text/x-script.perl",
".pm": "text/x-script.perl-module",
".png": "image/png",
".pnm": "image/x-portable-anymap",
".ppm": "image/x-portable-pixmap",
".pps": "application/vnd.ms-powerpoint",
".ppt": "application/vnd.ms-powerpoint",
".ps": "application/postscript",
".psd": "image/vnd.adobe.photoshop",
".py": "text/x-script.python",
".qt": "video/quicktime",
".ra": "audio/x-pn-realaudio",
".rake": "text/x-script.ruby",
".ram": "audio/x-pn-realaudio",
".rar": "application/x-rar-compressed",
".rb": "text/x-script.ruby",
".rdf": "application/rdf+xml",
".roff": "text/troff",
".rpm": "application/x-redhat-package-manager",
".rss": "application/rss+xml",
".rtf": "application/rtf",
".ru": "text/x-script.ruby",
".s": "text/x-asm",
".sgm": "text/sgml",
".sgml": "text/sgml",
".sh": "application/x-sh",
".sig": "application/pgp-signature",
".snd": "audio/basic",
".so": "application/octet-stream",
".svg": "image/svg+xml",
".svgz": "image/svg+xml",
".swf": "application/x-shockwave-flash",
".t": "text/troff",
".tar": "application/x-tar",
".tbz": "application/x-bzip-compressed-tar",
".tcl": "application/x-tcl",
".tex": "application/x-tex",
".texi": "application/x-texinfo",
".texinfo": "application/x-texinfo",
".text": "text/plain",
".tif": "image/tiff",
".tiff": "image/tiff",
".torrent": "application/x-bittorrent",
".tr": "text/troff",
".txt": "text/plain",
".vcf": "text/x-vcard",
".vcs": "text/x-vcalendar",
".vrml": "model/vrml",
".war": "application/java-archive",
".wav": "audio/x-wav",
".wma": "audio/x-ms-wma",
".wmv": "video/x-ms-wmv",
".wmx": "video/x-ms-wmx",
".wrl": "model/vrml",
".wsdl": "application/wsdl+xml",
".xbm": "image/x-xbitmap",
".xhtml": "application/xhtml+xml",
".xls": "application/vnd.ms-excel",
".xml": "application/xml",
".xpm": "image/x-xpixmap",
".xsl": "application/xml",
".xslt": "application/xslt+xml",
".yaml": "text/yaml",
".yml": "text/yaml",
".zip": "application/zip"
}
};
http.createServer(function(req, res) {
// if we're looking for root, serve index.html
var u = url.parse(req.url);
var path = u.pathname;
if (path === '/') {
path = '/index.html'
}
// look for the static document requested
// if it's not found, return a 404
fs.readFile('.' + path, function(err, data) {
if (err) {
res.writeHead(404);
res.end();
return;
}
// return the document
res.writeHead(200, {
'Content-Type': mime.lookupExtension(require('path').extname(path))
});
res.end(data);
});
}).listen(3000, "127.0.0.1");
console.log('Opened server on 127.0.0.1:3000')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment