Aprender Node.js

Aprender Node.js – Realizar el primer setup inicial

Toca renovarse. Después de muchos años usando una tecnología es normal que te hayas podido quedar un poquito estancado en cuanto a los referentes del mercado aunque por otro lado es muy seguro que hayas conseguido dominar esa tecnología y hoy vamos a empezar a aprender Node.js.

En el mundo tecnológico existe una máxima que dice que aproximadamente cada dos años se duplica el número de transistores que soporta un microprocesador. Hablo de la Ley de Moore. Esto es vertiginoso, trata de imaginar lo que supone, la tecnología avanza a pasos exponenciales y con las tendencias de desarrollo pasa casi lo mismo.

Lo que hoy sirve para desarrollar mañana ya no y por eso es muy importante que no caigamos en nuestra zona de comfort y salgamos a aprender lenguajes y tecnologías nuevas.

Por eso el sentido de estos artículos, vamos a aprender a programar con Node.js bajo una configuración de MEAN Stack y para que no nos perdamos empezaremos por el principio de todo.

¿Qué es Node.js?

Antes de entrar en materia y aprender Node.js deberíamos saber como hemos llegado hasta aquí, conocer un poquito la historia del desarrollo de aplicaciones web (tema en el que estoy especializado)

Tipicamente cuando desarrollabas una aplicación web dividías el trabajo en dos mundos. Por un lado tenías la parte Frontend y por otra la parte Backend. Normalmente se empezaba a trabajar primero en el Backend con lenguajes típicos de Backend como PHP, ASP o Java.

Ahí definías tus modelos de datos, tus controladores, servicios y básicamente la lógica de tu aplicación.

Por otro lado y de forma paralela había que ir construyendo la parte Frontend con lenguajes típicos como HTML, CSS y Javascript.

Ahí definías la parte visual, la estructura y la lógica de cara al cliente de tu aplicación/página web.

Esta dicotomía en el desarrollo de una aplicación/página web hizo que a medida que avanzaba la tecnología el mercado y los puestos de trabajo se dividieran en estas dos vertientes.

O te peleabas con la parte visual de la página o te peleabas con las tripas de la aplicación y por lo general el que trabajaba en el back no se entrometía en el front y viceversa. Esto generó muchos puestos de trabajo y muchos profesionales especializados en su “parte”.

Pero y aquí es cuando la matan, llegó un día en el que se “estandarizó” un lenguaje de programación para unir estos dos mundos tan diferentes.

Una herramienta que te permitía con el mismo lenguaje de programación trabajar en la parte Frontend y en la parte Backend. Hablo de Javascript y de Node.js.

Pero para entender qué es Node.js vamos a ver su definición formal de la Wikipedia:

Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google

Esto quiere decir que con Node.js vamos a tener la misma o parecida capacidad de desarrollo que tienen otros lenguajes de programación del lado del servidor pero trabajando con Javascript.

Suena fantástico para todos aquellos Frontend que quieren dar el salto a las aplicaciones de servidor ya que no van a necesitar aprender un lenguaje nuevo sino que se pueden adaptar a Node.js con su experiencia previa y con una de aprendizaje bastante baja.

¿Pero qué ventajas tiene aprender Node.js como para plantearme hacer el cambio?

Pues bueno, uno de sus puntos fuertes es la concurrencia. A diferencia de PHP o Java en el que cada petición genera un hilo de ejecución, con Node.js te tienes que despreocupar de eso ya que funciona de forma asíncrona con un único hilo de ejecución orientado a eventos.

Cuando llega una petición esta se pasa a un pool de eventos. Este pool va consumiendo las peticiones sin bloquear la I/O mientras que el script que lanzó la petición sigue trabajando.

Solo cuando el pool ha terminado de procesar la petición envía un evento que es capturado por el script original y ordena que se ejecute algo definido en la función de callback.

Si quieres profundizar en el funcionamiento interno de Node.js este enlace (ojo, en inglés) te ayudará a entender como funciona toda esta película 😉

http://www.journaldev.com/7462/node-js-architecture-single-threaded-event-loop

Algo que en mis años como programador Symfony siempre me ha encantado es el sistema de bundles que existe.

Un bundle no deja de ser un paquete de código atómico y reutilizable que solventa un problema y que cualquiera puede instalar en su proyecto sin necesidad de reinventar la rueda.

Como no podía ser de otra forma Node.js también tiene algo parecido y son los módulos.

Existen módulos básicos para el manejo de ficheros, de protocolos de red, de Timers, de Streams… pero también existen otros módulos desarrollados por la comunidad y que puedes usar en tu proyecto sin ningún tipo de problemas.

En este enlace puedes ver un listado de módulos típicos y útiles en una aplicación Node.js

https://www.codementor.io/ashish1dev/list-of-useful-nodejs-modules-du107mcv3

Estas dos características y la potencia que tiene el escribir en el mismo lenguaje todas las partes de tu página/aplicación web deberían ser suficientes como para que te plantees el aprender Node.js pero por si todavía tienes dudas aquí puedes ver una comparación de rendimiento entre una aplicación Java y otra construida con Node.js.

Cómo instalar Node.js

Instalar Node.js es muy sencillo, ya estés utilizando Windows, Linux o Mac OS lo único que tienes que hacer es dirigirte a su página de descargas y seleccionar el paquete que te interesa.

Una vez entres en este enlace podrás decidir si descargarte una versión LTS de largo soporte o la última versión liberada. Si vas a utilizar Node.js para producción te recomiendo que te descargues la versión LTS.

Su instalación es muy sencilla, te aparecerá un asistente y realmente tendrás que ir haciendo click en el botón de siguiente (a no ser que quieras configurar algo mas avanzado como el directorio de instalación…)

Junto con Node.js se te va a instalar también NPM que es el gestor de paquetes que utilizamos para manejar las posibles dependencias que tendrá nuestro proyecto.

Cuando haya terminado la instalación podemos comprobar la versión tanto de Node.js como de NPM con los siguientes comandos:

$ node -v 
v7.9.0

$ npm -v
4.2.0 

Si por un casual ha salido una versión nueva de NPM y queremos actualizarnos tenemos estos dos comandos:

$ npm install -g npm
$ npm update -g npm

El flag -g es para instalar/actualizar a nivel global.

Hasta aquí la parte mas sencilla de empezar a aprender Node.js 🙂

Primer script de consola en Node.js

En el camino al zen de aprender Node.js estamos en el primer nivel. Ya hemos configurado todo lo necesario para poder correr aplicaciones hechas con este entorno de desarrollo y lo que vamos a hacer a continuación es crear una pequeña aplicación de prueba.

Al ser Node.js un entorno para programar aplicaciones javascript del lado del servidor parece razonable que todos nuestros scripts sean scripts JS, ¿no?

Personalmente me encantan las aplicaciones de consola, ya sean desde procesos en bash y/o C, C++, los potentes comandos de Symfony o los scripts en Javascript. No hay límite, se puede construir lo que uno quiera pero para este ejemplo vamos a escribir una calculadora sencilla que acepta tres parámetros de entrada.

En el directorio en el que se encuentre nuestro workspace vamos a crear el siguiente fichero:

Vamos a explicar las líneas mas significantes del script:

  1. La primera línea, la declaración del ‘use strict’, sirve para indicar a los navegadores que en el momento de interpretar el código sean mas “estrictos” a la hora de permitir ciertas licencias al programador como por ejemplo el uso obligatorio en la declaración de variables o la captura de errores y excepciones. En definitiva, hacer que tu código sea mejor. Para mas información échale un vistazo a este enlace.
  2. Con la siguiente línea estamos capturando los argumentos pasados en la ejecución del script. Para ello invocamos al método process.argv.slice(2) y lo guardamos en una variable que será un array. El porqué del número 2 dentro de la función slice tiene significado. Piensa en arrays, cuando ejecutemos el script en la terminal, el primer nodo del array estará reservado para el interprete (node), el segundo nodo del array será para el script (calc.js) y el tercer nodo para los argumentos a pasar al script.
  3. El resto de líneas creo que no hace falta explicarlas, javascript y programación básica, asignaciones, casting de datos y sentencias de control. Primero de programación oye!

Para ejecutar este primer script tendremos que hacerlo de la siguiente forma:

$ node calc.js 1 + 4

Decir que los parámetros se tienen que pasar separados, es decir, primer parámetro un número, segundo parámetro un operador y tercer parámetro otro número.

Ah! y son recibidos como strings así que acuérdate siempre de hacer la conversión de tipos (si es que tu script lo necesita)

Hala a jugar! 😛

¿Qué es y cómo instalar Express en Node.js?

Otro tema interesante y necesario en el proceso de aprender Node.js es el uso de Express. ¿Pero qué es Express me preguntaréis…?

Bueno pues Express es una infraestructura para aplicaciones hechas en Node.js que nos provee un conjunto de utilidades como el enrutado de la aplicación, el uso del protocolo HTTP y la capacidad de crear APIs Restful entre otras cosas. A día de hoy no concibo una aplicación node sin express.

Para instalar Express en nuestro proyecto tendremos que echar mano de la terminal y del gestor de dependencias NPM, para ello escribimos lo siguiente:

$ npm install express --save

Y ya está, una vez terminé la instalación ya podremos utilizar Express en nuestro proyecto.

El flag –save indica a NPM que guarde una copia del paquete a instalar dentro del directorio del proyecto y que lo añada a la lista de dependencias. Util cuando le pasamos el proyecto a un nuevo miembro del equipo de desarrollo y tal…

Desde este enlace puedes consultar todas las referencias que nos provee este framework de desarrollo.

¿Qué es y cómo instalar BodyParser?

Es un middleware (es una capa que se ejecuta antes de nuestro código) que nos va a permitir manejar y parsear en objetos JSON las request que hagamos a nuestra aplicación.

Pero no solo va a convertir a objeto JSON la request sino que podemos configurarlo para que haga un parseo a RAW, a texto plano o a lo que en inglés se conoce como “URL-encoded form body” (vale, no se el equivalente en castellano xD)

En su repositorio de github tienes un montonazo de información útil, te recomiendo que le eches un vistazo y que lo utilices en tus proyectos si o si.

Para instalarlo hay que utilizar el gestor de dependencias NPM tal que así:

$ npm install body-parser

Y ya está!

¿Qué es y cómo instalar Nodemon?

¿Sigues queriendo aprender Node.js? Pues una de las utilidades que vas a necesitar en tu camino al zen es Nodemon. ¿Y qué es me preguntarás?

Pues Nodemon es un demonio (o un daemon tal y como se conoce en informática a este tipo de programas) que te permite recargar toda tu aplicación web al detectar un cambio en tus ficheros sin necesidad de tener que parar a mano el servidor y volver a levantarlo. Lo hace automáticamente!

Es muy sencillo de instalar como de utilizar, para ello tecleamos los siguiente en la terminal:

npm install -g nodemon

Cuando acabe la instalación y para añadirlo a nuestro proyecto podemos configurar la sección de scripts de nuestro package.json.

Esta sección nos permite definir nuestros propios comandos dentro de la aplicación. Me explico: si por ejemplo tenemos una suite de test unitarios que se ejecutan y generan un report de cobertura mediante tres comandos diferentes (por ejemplo) desde esta sección podríamos definir un “alias” para toda la secuencia de comandos y así lanzando uno solo se ejecutaría todos.

Pero vamos a ver el ejemplo de como añadir Nodemon para que se levante cada vez que arrancamos el servidor de nuestro proyecto:

"scripts": {
 "start": "nodemon index.js",
 "test": "echo \"Error: no test specified\" && exit 1"
 },

El primer comando que hemos definido es el start indicándole a nodemon que mire el entrypoint index.js y así pues cuando lancemos un npm start sobre la raíz de nuestro proyecto se levantará de manera automática este demonio 😉

Crear un servidor con Node.js

Ahora si que si. Ya estamos preparados para aprender Node.js de verdad. Hasta este punto hemos estado instalando lo básico para comenzar a trabajar pero a partir de aquí ya si que vamos a bajar al barro y vamos a codificar nuestra primera aplicación 🙂

Y lo primero que tenemos que hacer es lanzar el comando npm init para que se nos genere el fichero package.json. Este fichero es el que contiene el manifiesto de nuestra aplicación, algo así como un resumen. Aquí se define desde el autor, la versión, la licencia de la aplicación, las dependencias tanto de desarrollo como de producción entre otras cosas.

Uno de los puntos que nos va a preguntar la consola cuando lancemos el comando npm init es por el entrypoint, es decir, el punto de entrada que ejecutará el servidor web. Por defecto nos lo deja en index.js dentro de la raíz del proyecto pero si por cambios organizativos en el directorio de la aplicación este punto de entrada se encuentra en otro lugar podemos indicárselo perfectamente.

Se me ha olvidado decir que con Node.js no necesitamos instalar un Apache o un Tomcat como hacíamos con PHP o Java si no que ya nos ofrece métodos para crear y levantar un servidor web escribiéndolo con Javascript.

Mira el script anterior, es un ejemplo muy sencillo de servidor hecho con Node.js y la definición de una ruta GET. Pero vamos a explicarlo poco a poco.

  1. La primera línea es la declaración del modo estricto tal y como hemos comentado antes.
  2. La segunda línea es la inclusión de Express en el script. A partir de ahora podremos utilizarlo en toda la aplicación.
  3. Siguientes líneas vamos a obviarlas de momento.
  4. En la línea 13 del script definimos una ruta en la raíz principal. Esta ruta aceptará peticiones GET. Lo primero que hay que indicar es la URI de la ruta y después una función de callback a la que le pasamos los objetos request y response.
  5. En la línea 20 levantamos el servidor y hacemos que escuche por el puerto definido en su primer argumento. El segundo argumento es para la función callback que podemos utilizar para imprimir por consola el estado del servidor (o hacer otras cosas interesantes!)

Ahora si todo ha ido bien y nos dirigimos a http://localhost:3000 deberíamos ver lo siguiente.

Eso significa que tanto la instalación de Node.js como sus dependencias y que el proyecto están funcionando correctamente.

A partir de aquí nos queda ir aprendiendo el resto de componentes de esta tecnología pero será poco a poco en otros artículos

Si tienes algún tipo de preguntas o tan solo quieres ponerme a parir no dudes en hacerme llegar tus comentarios a través del siguiente banner de Twitter.

@gorkakatua #faqsGorkamu pregúntame por twitter cualquier cosa y vemos cómo lo solucionamos.

Hala a cascarla!

¿Te ha parecido este un artículo de 5 estrellas? Dame tu valoración:
Review Date
Reviewed Item
Aprender Node.js - Realizar el primer setup inicial
Author Rating
51star1star1star1star1star

Gorka Muñoz Andrés

Me llamo Gorka Muñoz y soy un desarrollador melómano. Combino a la perfección la búsqueda de nuevos grupos con la pasión por la tecnología. Desde chiquitito me ha gustado la programación, ahora que soy mayor estoy metido en el mundo del SEO sin olvidarme del /Dev.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *