Me considero yayodesarrollador web, no por que sea viejo sino por que soy de esa generación de desarrolladores que conocieron la web en su fase 1.0 y que formaron parte de la estandarización de la web 2.0. Soy un desarrollador web que se encuentra más cómodo desarrollando en Javascript «puro» que usando jQuery y que aún recuerda como hacer una petición Ajax «a pelo», usando el objeto XMLHTTPRequest
y el odiado ActiveX
para que IE no se queje.
De esa generación de desarrolladores que acababan de conocer Ajax y lo usaban para todo, hasta para lo que ahora te da vergüenza admitir, que descubrieron que los selectores CSS3
iban a revolucionar el Javascript que conocían y que vieron como Google Chrome, con su motor de Javascript V8 entraba en el mercado para literalmente darle la vuelta.
Y aquí es donde entre Node.js, que está basado en el uso de V8 como motor de procesamiento de javascript, pero a diferencia de lo que habíamos visto en nuestros tiempo mozos, hace 10 años, esta vez se usa en el servidor… ¿!EN EL SERVIDOR!?, si si, como lo oyes, puedes programar en Javascript pero en el servidor…O.o.
La idea no es nueva, por allá en el 2008 aparecía Jaxer que intentaba hacer algo parecido, y poco más he leido después de él. Y lo que se consigue es acercar las maravillas de un lenguaje como Javascript, con capacidad de orientarse a eventos permitiendo programar de forma asíncrona fácilmente al servidor, todo ello por que este tipo de programación consigue unos resultados de rendimiento espectaculares al estar básicamente en estado latente esperando a que se ejecute el evento X o el evento Y.
Vale vale, pero ¿nos ponemos a ello?
Lo primero es instalarlo, para ello, lo descargamos de la página oficial y lo instalamos (doble click en Windows y en Mac, make && make install en Linux). Una vez instalado ya podemos ponernos a tocar código que es lo que nos gusta!
// Cargamos el módulo HTTP
var http = require('http');
// Creamos un servidor HTTP que devolverá "Hola Mundo!" en cualquier petición
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hola Mundo!\n");
});
// Escuchamos el puerto 8000
server.listen(8000);
// Mostramos un mensaje en la terminal
console.log("Server running at http://127.0.0.1:8000/");
El típico «Hola Mundo» nos muestra ya por donde van a ir los tiros en cuenta al asincronismo que os comentaba. El objeto server, queda asociado al puerto 8000 que ejecutará el callback definido unas líneas por encima.
Ahora para ejecutar esto en tu máquina, tendrás que guardar este código dentro de un fichero .js
para ser llamado por node.js de la siguiente forma.
node fichero.js
El resultado, en la consola que hemos ejecutado el comando debería parecerse a esto:
Y como la consola indica, nos dirigiremos al enlace http://127.0.0.1:8000/
y veremos el texto «Hola Mundo!«. Sencillo, rápido y funcional.
Módulo, módulos y más módulos
Parte del éxito de Node.js reside en la comodidad para trabajar con módulos, y la facilidad de incluirlos a tu proyecto, traído de otros lenguajes se adhiere a nuestros proyectos de forma tan eficiente y práctica que no da pereza generar nuevos y nuevo módulos. De ahí que la comunidad se haya puesto las pilas y haya generado implementaciones de casi todos los componentes que te puedas imaginar.
npm install package
El comando npm
, se instala con Node.js y mediante esa sencilla sintaxis podemos añadir un módulo a nuestro proyecto o al repositorio global de node.js dejándolo disponible para todos los proyectos dentro de esa máquina (node install -g package
).
package.json
Para hacernos aún la vida más fácil, podemos especificar el fichero package.json
, en el que definiremos el nombre de nuestra aplicación y las dependencias que este necesita.
{
"name": "application-name"
, "version": "0.0.1"
, "private": true
, "dependencies": {
"express": "2.5.8"
, "stylus" : "0.27.0"
, "coffee-script": "1.3.2"
, "swig": "0.11.2"
}
}
Luego, como si de magia se tratara solicitamos que se instalen todas las dependencias del proyecto.
npm install -d
Y automáticamente empiezan a descargar los paquetes y guardarlos en la carpeta node_modules/
del proyecto.
Simplemente eso, cargamos lo que necesitamos y lo empezamos a usar en nuestro proyecto, así de sencillo. Esto da lugar a que un proyecto node.js, incluya frameworks para casi cualquier cosa, para escribir HTML más rápido (jade), para hacer un Javascript más eficiente (CoffeeScript) o para que las CSS’s se comporten como un lenguaje de programación (Stylus), o como he dicho antes, para hacer casi cualquier cosa.
Incluso, proyectos que juntan estos y otros frameworks/módulos y definen una forma ágil y robusta de trabajar como ExpressJS o Meteor que merecen la pena tratar con más detalle en otra serie de posts.