Static websites using nodejs

The simple web server written in NodeJs responds with almost every kind of file type, you may want for the serve a static site, there are a couple of modules available to serve static sites using node js eg. express, connect etc. but if you want to try yourself you can read this tutorial

before we start with nodejs, let me give you quick idea about the nodejs

So..
Node.js® is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. click here to read more..

In simple term you can create your own web server written in javascript language to serve static or dynamic sites…

Here is my server script on github for download

Download It from github

Download It from github

or you can just copy below code in to app.js and create “www” director in the same location where you can put all your assets and directory structure

/*
	To use the HTTP server and client one must require('http')
	
*/
var http = require('http');



/* 
	now we require path module of the node js to read path and retrieve required files from directory structure 
*/
var path = require('path');


/* 
	fs (File System) this module of node js reads the files eg. index.html, style.css etc. we required this module to output
*/
var fs = require('fs');


/*
	Now this is the most important stage we are going to create our server on localhost and on port 8080 where all our request will served from
*/
http.createServer(function(req, res) {
  getResource(req, res);
}).listen(8080, 'localhost');


/* This is just a javascript function which retrive path of file there mimetypes and reads the file and sends a response to the request */
function getResource(req, res) {
  filename = '/' + (path.basename(req.url) || 'index.html');
  dirname = path.dirname(req.url).substring(1);
  var localpath = __dirname + '/www/';
  filename = localpath + (dirname || '') + filename;
  var filedata = '';
  fs.exists(filename, function(exists) {
    if (exists) {
      rFile(filename, res);
    } else {
      res.writeHead(404);
      res.end();
    }
  })
}



/* 
	getMIME this function actually has all the mime types which our server can response data 

*/
function getMIME(ext) {
  extObj = {
    "hqx": "application/mac-binhex40",
    "cpt": "application/mac-compactpro",
    "csv": ["text/x-comma-separated-values", "text/comma-separated-values", "application/octet-stream", "application/vnd.ms-excel", "application/x-csv", "text/x-csv", "text/csv", "application/csv", "application/excel", "application/vnd.msexcel"],
    "bin": "application/macbinary",
    "dms": "application/octet-stream",
    "lha": "application/octet-stream",
    "lzh": "application/octet-stream",
    "exe": ["application/octet-stream", "application/x-msdownload"],
    "class": "application/octet-stream",
    "psd": "application/x-photoshop",
    "so": "application/octet-stream",
    "sea": "application/octet-stream",
    "dll": "application/octet-stream",
    "oda": "application/oda",
    "pdf": ["application/pdf", "application/x-download"],
    "ai": "application/postscript",
    "eps": "application/postscript",
    "ps": "application/postscript",
    "smi": "application/smil",
    "smil": "application/smil",
    "mif": "application/vnd.mif",
    "xls": ["application/excel", "application/vnd.ms-excel", "application/msexcel"],
    "ppt": ["application/powerpoint", "application/vnd.ms-powerpoint"],
    "wbxml": "application/wbxml",
    "wmlc": "application/wmlc",
    "dcr": "application/x-director",
    "dir": "application/x-director",
    "dxr": "application/x-director",
    "dvi": "application/x-dvi",
    "gtar": "application/x-gtar",
    "gz": "application/x-gzip",
    "php": "application/x-httpd-php",
    "php4": "application/x-httpd-php",
    "php3": "application/x-httpd-php",
    "phtml": "application/x-httpd-php",
    "phps": "application/x-httpd-php-source",
    "js": "application/x-javascript",
    "swf": "application/x-shockwave-flash",
    "sit": "application/x-stuffit",
    "tar": "application/x-tar",
    "tgz": ["application/x-tar", "application/x-gzip-compressed"],
    "xhtml": "application/xhtml+xml",
    "xht": "application/xhtml+xml",
    "zip": ["application/x-zip", "application/zip", "application/x-zip-compressed"],
    "mid": "audio/midi",
    "midi": "audio/midi",
    "mpga": "audio/mpeg",
    "mp2": "audio/mpeg",
    "mp3": ["audio/mpeg", "audio/mpg", "audio/mpeg3", "audio/mp3"],
    "aif": "audio/x-aiff",
    "aiff": "audio/x-aiff",
    "aifc": "audio/x-aiff",
    "ram": "audio/x-pn-realaudio",
    "rm": "audio/x-pn-realaudio",
    "rpm": "audio/x-pn-realaudio-plugin",
    "ra": "audio/x-realaudio",
    "rv": "video/vnd.rn-realvideo",
    "wav": ["audio/x-wav", "audio/wave", "audio/wav"],
    "bmp": ["image/bmp", "image/x-windows-bmp"],
    "gif": "image/gif",
    "jpeg": ["image/jpeg", "image/pjpeg"],
    "jpg": ["image/jpeg", "image/pjpeg"],
    "jpe": ["image/jpeg", "image/pjpeg"],
    "png": ["image/png", "image/x-png"],
    "tiff": "image/tiff",
    "tif": "image/tiff",
    "css": "text/css",
    "html": "text/html",
    "htm": "text/html",
    "shtml": "text/html",
    "txt": "text/plain",
    "text": "text/plain",
    "log": ["text/plain", "text/x-log"],
    "rtx": "text/richtext",
    "rtf": "text/rtf",
    "xml": "text/xml",
    "xsl": "text/xml",
    "mpeg": "video/mpeg",
    "mpg": "video/mpeg",
    "mpe": "video/mpeg",
    "qt": "video/quicktime",
    "mov": "video/quicktime",
    "avi": "video/x-msvideo",
    "movie": "video/x-sgi-movie",
    "doc": "application/msword",
    "docx": ["application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/zip"],
    "xlsx": ["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/zip"],
    "word": ["application/msword", "application/octet-stream"],
    "xl": "application/excel",
    "eml": "message/rfc822",
    "json": ["application/json", "text/json"]
  };
  return (extObj[ext]);
}

/* simple read file function using fs module which we have already created */
function rFile(filename, res) {
  fs.readFile(filename, function(err, contents) {
    if (!err) {
      ext = path.extname(filename).substring(1);
      res.writeHead(200, {"Content-Type": getMIME(ext), "Content-Length": contents.length});
      res.end(contents);
    } else {
      res.writeHead(404);
      res.end();
    }
  })
}

/* 
	This is logger function which will log everything on servers console
*/
function log_message(type, message) {
  types = {'debug': 'Debug', 'error': 'Error', 'info': 'Info', 'alert': 'Alert'}
  if (types[type]) {
    console.log(types[type] + ':: ' + message);
  }
}

Thank you…

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: