Servidor Node sin framework

Este artículo proporciona un servidor de ficheros estático simple construido con Node.js puro, para aquellos de vosotros que no quieran usar un framework.

NodeJS has many frameworks to help you get your server up and running, the most popular being:

  • Express: The most used framework.
  • Total: The all-in-one Node.js framework that has everything and does not depend on any other framework or module.

There is however not a solution that will suit every situation. A developer may need to build his/her own server, without any other dependency.


Below is a simple static file server built with NodeJS:

var http = require('http');
var fs = require('fs');
var path = require('path');

http.createServer(function (request, response) {
    console.log('request ', request.url);

    var filePath = '.' + request.url;
    if (filePath == './') {
        filePath = './index.html';

    var extname = String(path.extname(filePath)).toLowerCase();
    var contentType = 'text/html';
    var mimeTypes = {
        '.html': 'text/html',
        '.js': 'text/javascript',
        '.css': 'text/css',
        '.json': 'application/json',
        '.png': 'image/png',
        '.jpg': 'image/jpg',
        '.gif': 'image/gif',
        '.wav': 'audio/wav',
        '.mp4': 'video/mp4',
        '.woff': 'application/font-woff',
        '.ttf': 'application/font-ttf',
        '.eot': 'application/',
        '.otf': 'application/font-otf',
        '.svg': 'application/image/svg+xml'

    contentType = mimeTypes[extname] || 'application/octet-stream';

    fs.readFile(filePath, function(error, content) {
        if (error) {
            if(error.code == 'ENOENT'){
                fs.readFile('./404.html', function(error, content) {
                    response.writeHead(200, { 'Content-Type': contentType });
                    response.end(content, 'utf-8');
            else {
                response.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
        else {
            response.writeHead(200, { 'Content-Type': contentType });
            response.end(content, 'utf-8');

console.log('Server running at');

To do

It would be nice to extend this article to explain how the above code works, and perhaps also show an extended version that serves static files and also handles some kind of dynamic requests too.