Node.js es un entorno de ejecución de JavaScript. Suena genial, pero ¿qué significa eso? ¿Cómo funciona?
El entorno de tiempo de ejecución de Node.js incluye todo lo que necesita para ejecutar un programa escrito en JavaScript.

Node.js nació cuando los desarrolladores originales de JavaScript lo ampliaron de algo que solo podía ejecutar en el navegador a algo que podía ejecutar en su máquina como una aplicación independiente.
Ahora puede hacer mucho más con JavaScript que simplemente hacer que los sitios web sean interactivos.
JavaScript ahora tiene la capacidad de hacer cosas que otros lenguajes de programación como Python pueden hacer.
Tanto el JavaScript de su navegador como Node.js se ejecutan en el motor de tiempo de ejecución de JavaScript V8. Este motor toma su código JavaScript y lo convierte en un código de máquina más rápido. El código de máquina es un código de bajo nivel que la computadora puede ejecutar sin necesidad de interpretarlo primero.
¿Por qué Node.js?
Aquí hay una definición formal como se da en el sitio web oficial de Node.js:
Node.js® es un tiempo de ejecución de JavaScript construido en el motor de JavaScript V8 de Chrome.Node.js usa un modelo de E / S sin bloqueo controlado por eventos que lo hace liviano y eficiente.
El ecosistema de paquetes de Node.js, npm, es el ecosistema de bibliotecas de código abierto más grande del mundo.
Ya analizamos la primera línea de esta definición: "Node.js® es un tiempo de ejecución de JavaScript construido en el motor de JavaScript V8 de Chrome". Ahora entendamos las otras dos líneas para que podamos descubrir por qué Node.js es tan popular.
E / S se refiere a entrada / salida. Puede ser cualquier cosa, desde leer / escribir archivos locales hasta realizar una solicitud HTTP a una API.
La E / S lleva tiempo y, por tanto, bloquea otras funciones.
Considere un escenario en el que solicitamos una base de datos de backend para los detalles de user1 y user2 y luego los imprimimos en la pantalla / consola. La respuesta a esta solicitud lleva tiempo, pero ambas solicitudes de datos del usuario se pueden realizar de forma independiente y al mismo tiempo.

Bloqueo de E / S
En el método de bloqueo, la solicitud de datos del usuario 2 no se inicia hasta que los datos del usuario 1 se imprimen en la pantalla.
Si este fuera un servidor web, tendríamos que iniciar un nuevo hilo para cada nuevo usuario. Pero JavaScript es de un solo subproceso (no realmente, pero tiene un ciclo de eventos de un solo subproceso, que discutiremos un poco más adelante). Así que esto haría que JavaScript no sea muy adecuado para tareas de subprocesos múltiples.
Ahí es donde entra la parte de no bloqueo.
E / S sin bloqueo
Por otro lado, al utilizar una solicitud sin bloqueo, puede iniciar una solicitud de datos para el usuario2 sin esperar la respuesta a la solicitud para el usuario1. Puede iniciar ambas solicitudes en paralelo.
Esta E / S sin bloqueo elimina la necesidad de subprocesos múltiples, ya que el servidor puede manejar múltiples solicitudes al mismo tiempo.
El bucle de eventos de JavaScript
Si tiene 26 minutos, vea esta excelente explicación en video del Node Event Loop:
De lo contrario, aquí hay una explicación rápida paso a paso de cómo funciona el bucle de eventos de JavaScript.

- Empuje
main()
hacia la pila de llamadas. - Empuje
console.log()
hacia la pila de llamadas. Esto luego se ejecuta de inmediato y se rompe. - Empuje
setTimeout(2000)
hacia la pila.setTimeout(2000)
es una API de nodo. Cuando lo llamamos, registramos el par evento-devolución de llamada. El evento esperará 2000 milisegundos, luego la devolución de llamada es la función. - Después de registrarlo en las API,
setTimeout(2000)
se extrae de la pila de llamadas. - Ahora el segundo
setTimeout(0)
se registra de la misma forma. Ahora tenemos dos API de nodo esperando para ejecutarse. - Después de esperar 0 segundos,
setTimeout(0)
se mueve a la cola de devolución de llamada y sucede lo mismo consetTimeout(2000)
. - En la cola de devolución de llamada, las funciones esperan a que la pila de llamadas esté vacía, porque solo una declaración puede ejecutar una vez. De esto se encarga el bucle de eventos.
- La última se
console.log()
ejecuta ymain()
se extrae de la pila de llamadas. - El bucle de eventos ve que la pila de llamadas está vacía y que la cola de devolución de llamada no está vacía. Por lo tanto, mueve las devoluciones de llamada (en un orden de primero en entrar, primero en salir) a la pila de llamadas para su ejecución.
npm

Estas son bibliotecas creadas por la increíble comunidad que resolverán la mayoría de sus problemas genéricos. npm (administrador de paquetes de nodo) tiene paquetes que puede usar en sus aplicaciones para que su desarrollo sea más rápido y eficiente.
Exigir
Require hace tres cosas:
- Carga módulos que vienen incluidos con Node.js como el sistema de archivos y HTTP desde la API de Node.js.
- Carga bibliotecas de terceros como Express y Mongoose que instala desde npm.
- Le permite solicitar sus propios archivos y modularizar el proyecto.
Require es una función y acepta un parámetro "ruta" y devuelve module.exports
.
Módulos de nodo
Un módulo de nodo es un bloque de código reutilizable cuya existencia no impacta accidentalmente a otro código.
Puede escribir sus propios módulos y usarlos en varias aplicaciones. Node.js tiene un conjunto de módulos integrados que puede usar sin ninguna instalación adicional.
V8 sobrecarga JavaScript al aprovechar C ++
V8 es un motor de tiempo de ejecución de código abierto escrito en C ++.
JavaScript -> V8 (C ++) -> Código de máquina
V8 implementa un script llamado ECMAScript como se especifica en ECMA-262. ECMAScript fue creado por Ecma International para estandarizar JavaScript.
V8 puede ejecutarse de forma independiente o puede integrarse en cualquier aplicación C ++. Tiene ganchos que le permiten escribir su propio código C ++ que puede poner a disposición de JavaScript.
Básicamente, esto le permite agregar funciones a JavaScript incorporando V8 en su código C ++ para que su código C ++ comprenda más de lo que especifica el estándar ECMAScript.
Editar: Como me llamó la atención de Greg Bulmash, hay muchos motores de tiempo de ejecución de JavaScript diferentes además de V8 de Chrome como SpiderMonkey de Mozilla, Chakra de Microsoft, etc. Los detalles de los mismos se pueden encontrar en esta página.
Eventos
Algo que ha sucedido en nuestra aplicación a lo que podemos responder. Hay dos tipos de eventos en Node.
- Eventos del sistema: núcleo de C ++ de una biblioteca llamada libuv. (Por ejemplo, terminó de leer un archivo).
- Eventos personalizados: núcleo de JavaScript.
Escribir Hello World en Node.js
Tenemos que hacer esto, ¿no?
Cree un archivo app.js y agréguele lo siguiente.
console.log("Hello World!");
Abra su terminal de nodo, cambie el directorio a la carpeta donde se guarda y ejecuta el archivo node app.js
.
Bam: acabas de escribir Hello World en Node.js.
Sigue a @ Priyesh_p18Hay un montón de recursos que puede utilizar para obtener más información sobre Node.js, incluido freeCodeCamp.org.