Nodejs
1. Introducción a Node.js
Node.js es un entorno de ejecución de JavaScript que permite ejecutar código JavaScript en el lado del servidor. Fue creado por Ryan Dahl en 2009 y está basado en el motor V8 de Google Chrome. Node.js es una herramienta muy poderosa para el desarrollo de aplicaciones web y APIs RESTful, ya que permite realizar operaciones de entrada/salida de forma asíncrona y no bloqueante.
¿Por qué es Node.js?
Node.js permite manejar múltiples solicitudes simultáneamente sin bloquear el hilo principal, lo que lo hace muy eficiente para aplicaciones en tiempo real y de alta concurrencia.
Historia y Evolución de Node.js
- 2009: Creación de Node.js por Ryan Dahl.
- 2010: Lanzamiento de la primera versión estable.
- 2011: Lanzamiento de npm (Node Package Manager).
- 2012-2021: Mejora continua con nuevas versiones y características.
Características de Node.js
- Asíncrono y no bloqueante
- Eventos y callbacks
- Módulos y paquetes
- NPM (Node Package Manager)
- Rendimiento y escalabilidad
- Comunidad activa
2. Manejadores de Paquetes en Node.js
Los manejadores de paquetes son herramientas esenciales para la gestión de dependencias en proyectos Node.js.
npm (Node Package Manager)
- Descripción: El manejador de paquetes por defecto para Node.js.
- Uso Básico:
npm install <paquete>: Instala un paquete.
npm install --save-dev <paquete>: Instala un paquete para desarrollo.
npm update: Actualiza paquetes instalados.
yarn
- Descripción: Alternativa a npm creada por Facebook, ofrece una instalación más rápida y una mejor gestión de dependencias.
- Uso Básico:
yarn add <paquete>: Instala un paquete.
yarn add --dev <paquete>: Instala un paquete para desarrollo.
yarn upgrade: Actualiza paquetes instalados.
pnpm
- Descripción: Un manejador de paquetes más rápido y eficiente que almacena un único conjunto de paquetes en lugar de duplicar dependencias.
- Uso Básico:
pnpm install <paquete>: Instala un paquete.
pnpm install --save-dev <paquete>: Instala un paquete para desarrollo.
pnpm update: Actualiza paquetes instalados.
3. Manejadores de Versiones de Node.js
Los manejadores de versiones permiten gestionar múltiples versiones de Node.js en un solo sistema.
nvm (Node Version Manager)
- Descripción: Herramienta para instalar y gestionar múltiples versiones de Node.js.
- Uso Básico:
nvm install <version>: Instala una versión específica de Node.js.
nvm use <version>: Cambia a una versión específica.
nvm ls: Lista las versiones instaladas.
fnm (Fast Node Manager)
- Descripción: Alternativa más rápida a nvm, también permite gestionar versiones de Node.js.
- Uso Básico:
fnm install <version>: Instala una versión específica de Node.js.
fnm use <version>: Cambia a una versión específica.
fnm ls: Lista las versiones instaladas.
4. Entornos de Ejecución de JavaScript
Node.js no es el único entorno de ejecución para JavaScript. Aquí se presentan otras opciones que están ganando popularidad.
Node.js
- Descripción: Entorno de ejecución de JavaScript basado en el motor V8 de Google Chrome, diseñado para ejecutar código JavaScript en el lado del servidor.
- Características: Asíncrono, no bloqueante, amplio ecosistema de paquetes.
Deno
Descripción: Entorno de ejecución para JavaScript y TypeScript creado por Ryan Dahl (creador de Node.js) como una alternativa moderna a Node.js.
Características:
* Soporte nativo para TypeScript.
* Seguridad mejorada con permisos explícitos.
* No utiliza npm, usa deno.land/x para paquetes.
Bun
- Descripción: Un entorno de ejecución de JavaScript relativamente nuevo que se enfoca en el rendimiento y la simplicidad.
- Características:
* Enfocado en la velocidad y la compatibilidad.
* Incluye un empaquetador, un administrador de paquetes y un motor de ejecución en un solo binario.
* Compatible con Node.js en muchos aspectos, pero aún en desarrollo y evolución.
5. Fundamentos del Asincronismo en Node.js
Node.js es conocido por su modelo de programación asíncrona no bloqueante. Esto permite manejar múltiples solicitudes de entrada/salida (I/O) simultáneamente sin bloquear el hilo principal, haciendo que Node.js sea muy eficiente en operaciones que requieren acceder a archivos, bases de datos o servicios externos.
- Sincronía vs Asincronía
* **Sincronía:** Las operaciones se ejecutan secuencialmente.
* **Asincronía:** Las operaciones no bloquean el hilo principal, utilizando callbacks, promesas y async/await.
6. Callbacks
Un callback es una función que se pasa como argumento a otra función y se ejecuta después de que la operación asíncrona ha finalizado.
Ejemplo de Callback:
const fs = require('fs');
// Leer un archivo de manera asíncrona usando un callback
.readFile('archivo.txt', 'utf8', (err, data) => {
fsif (err) {
console.error("Error leyendo el archivo:", err);
return;
}console.log("Contenido del archivo:", data);
; })
Problema: Callback Hell A medida que anidamos callbacks, el código se vuelve difícil de leer y mantener.
7. Promesas
Las promesas son una forma más clara y manejable de trabajar con operaciones asíncronas.
Ejemplo de Promesa:
const fs = require('fs').promises;
.readFile('archivo.txt', 'utf8')
fs.then(data => {
console.log("Contenido del archivo:", data);
}).catch(err => {
console.error("Error leyendo el archivo:", err);
; })
8. Async/Await
Async/Await es una sintaxis moderna para trabajar con promesas que permite escribir código asíncrono de manera más legible.
Ejemplo de async/await:
const fs = require('fs').promises;
async function leerArchivo() {
try {
const data = await fs.readFile('archivo.txt', 'utf8');
console.log("Contenido del archivo:", data);
catch (err) {
} console.error("Error leyendo el archivo:", err);
}
}
leerArchivo();
9. Introducción a Node.js en la práctica
Vamos a crear una pequeña aplicación que lea archivos de manera asíncrona y envíe una respuesta utilizando un servidor básico de Node.js.
Crear un Servidor HTTP Asíncrono
const http = require('http');
const fs = require('fs').promises;
const server = http.createServer(async (req, res) => {
try {
const data = await fs.readFile('archivo.txt', 'utf8');
.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(data);
rescatch (err) {
} .writeHead(500, { 'Content-Type': 'text/plain' });
res.end("Error leyendo el archivo");
res
};
})
.listen(3000, () => {
serverconsole.log('Servidor escuchando en el puerto 3000');
; })
10. Gestión de Paquetes con NPM
Node.js utiliza NPM (Node Package Manager) para instalar y gestionar dependencias.
Comandos básicos de NPM:
- npm init: Inicia un nuevo proyecto y crea un archivo package.json.
- npm install <paquete>: Instala un paquete.
- npm install –save-dev <paquete>: Instala un paquete para desarrollo.
- npm update: Actualiza paquetes instalados.
- Preparando el Entorno para React
Para conectar lo aprendido en Node.js con React en la próxima clase, es fundamental instalar y configurar herramientas adicionales.