Node.js & Windows Azure – ¿Qué es realmente Node.js? ¿Por dónde empiezo? Creando mi Web server

Antes de comenzar mi primer post del año… ¡Feliz año nuevo! 😀

Durante estas vacaciones he dedicado parte de mi tiempo a documentarme y desarrollar mis primeras apps con Node.js. Para ello he estado leyendo Hands-on Node.js de Pedro Teixeira, El libro para principiantes en Node.js por Manuel Kiesslinq y, como no, estuve haciendo algunas pruebas con los tutoriales que el equipo de Windows Azure puso a nuestra disposición para instalar el SDK para Node.js y poder desplegar nuestras aplicaciones en la nube de Microsoft (Si, me han cundido mucho las Navidades :P).

Ahora he decidido refactorizar todo lo que he aprendido y expresarlo a mi manera tanto para comenzar con Node.js y, a su vez, enfocarlo al trabajo con Windows Azure. En este post veremos los siguientes puntos:

  1. ¿Qué es realmente Node.js?
  2. ¿Por dónde empiezo?
  3. Creando mi Web server

¿Qué es realmente Node.js?

Lo primero de todo, Node.js es, como indican en la página oficial, una plataforma construida sobre el runtime de Javascript utilizado por Chrome… aunque en realidad esto no nos dice mucho 🙁 Lo que si nos aporta es lo que dicen a continuación: «Te ayuda a construir aplicaciones de una manera rápida, escalables, disponemos de una entrada/salida que no permanece bloqueada por un proceso en concreto y además está orientada al evento.»

Para los desarrolladores, podríamos sintetizarlo en: Plataforma que nos da la posibilidad de crear aplicaciones realmente rápidas en pocas líneas de código y de forma bastante clara. Por otro lado toda nuestra infraestructura estará orientada a llamadas de callback. Para crear nuestra aplicación utilizaremos Javascript como lenguaje de programación, por lo que sería conveniente tener nociones bastante claras del mismo para adentrarse en el mundo de Node.js.

Lo que más impacta al comenzar, y en una mera introducción como la que acabo de hacer no te cuentan, es que no sólo vas a ser capaz de crear una aplicación rápida y escalable sino que también deberás crear el servidor web que la aloje así como administrar las peticiones, crear un sistema de enrutamiento, ¡desde cero! Al principio puede parecer una locura pero veremos que Node.js nos aportará una serie de módulos (librerías) que nos facilitarán enormemente el trabajo en pocas líneas 🙂

¿Por dónde empiezo?

Una vez que hemos decidido comenzar a trabajar con Node.js lo primero que necesito son dos pasos básicos:

  1. Instalar Node.js: Estos días he trabajado tanto en Mac como en Windows pero en este post me centraré en este último. En el blog de Node.js podremos encontrar las últimas versiones que van apareciendo (actualmente la versión v.0.6.7). en el caso de Windows podemos descargar el instalador a través de este enlace.
  2. IDE para Javascript con soporte para Node.js: En este punto estuve mirando varios IDEs que me aportaran tanto comodidad como facilidad para trabajar con la plataforma. Finalmente opté por WebStorm de JetBrains ya que es realmente cómodo trabajar con varios archivos a la vez, dispone de intellisense, te muestra errores en tiempo de codificación y puedes lanzar la consola de manera sencilla desde el propio IDE. Está disponible para Windows, Mac OS y Linux.
    Por otro lado cabe nombrar Nide, pensado especialmente para Node.js, SublimeText y Neatbeans con su plugin para Node.js.

Una vez que hemos instalado y elegido el IDE con el que queremos trabajar, podemos comenzar a escribir nuestras primeras líneas 🙂

Creando mi Web server

Como ya comenté en la introducción, con Node.js no sólo debes programar tu aplicación sino que además necesitas crear el entorno que la envuelve, es decir el servidor web. Para ello podemos escribir un servidor muy básico con las siguientes líneas:

var http = require('http');
http.createServer(function (request, response) {
    response.writeHead(200,{'Content-Type':'text/html'});
    response.end('<h1>Hello World!</h1>')
}).listen(8080);

En las líneas anteriores hemos creado las bases de nuestro servidores web. En la primera línea, almacenamos en una variable las funciones públicas del módulo http de Node.js, el cual nos facilitará la creación del servidor. A continuación, utilizamos la misma para invocar a createServer el cual recibide una función que será invocada cada vez que se realice una petición a nuestro servidor. En este caso, para el código sea lo más simple posible se ha creado una función anónima (una función que no tiene un nombre asignado) directamente entre los paréntesis del método createServer, pero también se le podría haber pasado el nombre de la función que deberá ser llamada con cada nueva petición. Dentro de esta función, la cual recibe como parámetros información relativa a la petición (request) y el objeto utilizado para responder a la misma (response) simplemente se han añadido dos líneas: la primera de ellas escribirá dentro de la cabecera de respuesta el valor 200 (Status OK) y el tipo de contenido que vamos a servir (text/html). Con la segunda línea haremos dos pasos en uno: escribir una cabecera h1 con el valor Hello World y, por otro lado, finalizar la respuesta gracías al método utilizado, end. Por último, debemos especificar el puesto a través del cual nuestro servidor está aceptando las peticiones, en este caso el 8080. Para ello utilizaremos el método listen, incluido dentro del módulo http, al que le pasaremos el puerto que queramos para nuestra aplicación.

¿Cómo ejecuto mi servidor?

Para poder ejecutar nuestro código Node.js podemos hacerlo a través de la consola de comandos de Windows, en la ubicación donde esté nuestro archivo y ejecutar: node server.js (este es el nombre que le he dado al archivo que almacena el código anterior). Ahora nuestro servidor web está a la escucha a través del puerto 8080 para posibles peticiones. Para comprobarlo , abrimos una ventana de nuestro navegador y escribimos: http://localhost:8080 donde deberíamos obtener como resultado lo siguiente:

Si nos fijamos tenemos como mensaje HTML nuestro Hello World! respetando su tag de h1 y, por otro lado, he mostrado el resultado de la respuesta a través de Firebug donde vemos que el status code es 200 y el tipo de contenido text/html tal y como definimos en nuestro servidor.

Espero que sea de utilidad 😀

Continuará… 😀

¡Saludos!