Comienzo otra nueva sección también dedicada al mundo JavaScript en este caso de NodeJS pero...

¿Que es NodeJS?

Bien en este caso la mejor explicación corta es la de la página oficial de NodeJS:

Node.js® es un entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome. Node.js usa un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente. El ecosistema de paquetes de Node.js, npm, es el ecosistema mas grande de librerías de código abierto en el mundo.

Para aclarar un poco NodeJS es la parte de backend de JavaScript y uno de sus puntos fuertes al ser no bloqueante (como dice arriba) es la concurrencia, es decir maneja peticiones sin detenerse o bloquear las que le llegan (tiene límites por supuesto) y esta orientado a eventos, que para el que no lo sepa este tipo de programación basa su funcionamiento en eventos o mensajes recibidos desde otros hilos, programas....desde donde sea.

Otro de sus puntos fuertes es npm, ¿y esto que es? bueno como hemos comentado arriba es el gestor de paquetes de código abierto más grande del mundo (orientados a JS), en el que podemos encontrar librerías de casi todo lo que se nos ocurra al ser open-source se beneficia de que cualquiera puede subir paquetes por lo que el límite es prácticamente la imaginación ;)

En un principio esta sección esta centrada solo en NodeJS pero en los primeros posts comentaré algunas características de JavaScript que nos ayudarán en el entendimiento del conjunto, de todas formas ya os adelanto que posiblemente haga alguna sección con pequeños trucos o ejemplos de uso de JS.
Hablaremos de Node no de JS pero si explicaremos lo necesario para entender lo que estamos haciendo.

Veamos un poco de que va esto de Node.

Instalación

No me voy a entretener en la instalación en la página oficial de Node viene muy bien explicado lo que tenemos que hacer en cada plataforma (en el caso de que sea distinto de descargar e instalar jejejeje)
Yo recomiendo instalar la versión LTS ya que es a la que van dando soporte a lo largo del tiempo, las nuevas pueden tener bugs o dar problemas, pero podéis probar si queréis jejeje.
La instalación nos provee también de npm por lo que ya lo tendríamos también disponible para usarlo. Más adelante iremos viendo como usar npm y que tenemos que tener en cuenta de su uso.

Pues sin mucho más vamos a empezar por ver algo de JavaScript.

Callbacks

En node todos los usos de entrada o salida deberían ser asíncronos (no deben bloquear el hilo principal que es el que gestiona ), y una gran parte de la ayuda la obtenemos de los callbacks. Y que son los callbacks, para explicarlo de forma sencilla podríamos decir que son funciones que estando en el ciclo de vida de otra se ejecutan al final, es decir, son funciones que se llaman al terminar otra y no antes(aprovechándonos muchas veces de la posibilidad de pasar funciones como parámetros), veamos un ejemplo de función asíncrona con callbacks, para ello nos ayudaremos de la función setTimeout que para el que no lo sepa nos da la posibilidad de ejecutar algo tras el periodo de tiempo que le indiquemos:

"use strict";

console.log('Empezamos');

function showAfter2Seconds(text, callbackFunc){
    setTimeout(()=>{
        console.log(text);

        callbackFunc();

    },2000);
}

showAfter2Seconds('Pasaron 2 segundos',()=>{
    console.log('Soy el callback');
});

console.log('Estoy fuera de la función')

Para ejecutarlo solo tenemos que usar el comando node seguido del nombre de nuestro fichero js:

node callbacks.js

Y tendriamos algo como esto:

Callback Demo
Como vemos primero nos muestra 'Empezamos' y luego directamente vemos 'Estoy fuera de la función' pero...¿por qué?. Bien esto de debe a como funciona la asincronía en sí, cuando trabajamos con asincronía tenemos que pensar que tenemos más de 1 trabajador jugando con nuestro código, tenemos el principal(el que manda) el que siempre curra y luego tenemos a los que este llama para que trabajen en segundo plano mientras el continua, es decir, cuando nuestro worker principal se encuentra con código asíncrono avisa a un compi para que lo haga y el continúa por donde estaba sin detenerse, por eso nos retorna el log que esta al final, porque el hilo principal ha llegado allí antes de que nuesto worker en segundo plano terminara. Pero claro esto no es tan simple como usar una función como parámetro y ya está, no nos confundamos, usar una función como parámetro y llamarla cuando nos interese es solo una ventaja del lenguaje que nos ayuda a evitar lo que se conoce como race condition, y que se ejecute nuestro código como nosotros queremos, si nosotros quitamos el setTimeout y ponemos otro tipo de función que nos detenga la ejecución lo que haría el código seria pararse en ese punto, devolver 'Soy el callback' y a continuación nos mostraría nuestro log 'Estoy fuera de la función'. En este caso lo que sucede es que setTimeout es una función asíncrona de por sí, es decir, cuando nuestro hilo principal se encuentra con esta función llama a algún compi disponible para que la ejecute y ya el compi es el responsable de lo que pase dentro de setTimeout, puede que sea un poco lioso y yo me haya extendido mucho en este punto pero es realmente IMPORTANTE entender esto para poder trabajar bien con NodeJS. Node comunmente se usa con una librería llamada async, la cual nos abstrae un poco de tener que hacer funciones como la que hemos visto arriba para usar asincronia, la documentación oficial esta muy bien explicada por lo que creo que es suficiente con que miréis un poco de que va aquí.

Bueno para empezar creo que es suficiente nos vemosss en el siguiente Ninjaaaassssssss