Introducción
Node.js es un entorno de ejecución de JavaScript que permite a los desarrolladores ejecutar código JavaScript en el lado del servidor. A diferencia de los navegadores web, que ejecutan JavaScript en el lado del cliente, Node.js permite que JavaScript se ejecute en el servidor, lo que abre una amplia gama de posibilidades para el desarrollo de aplicaciones web y de red.
Conceptos Clave
- Entorno de Ejecución
Node.js se basa en el motor V8 de Google Chrome, que es un motor de JavaScript de alto rendimiento. Esto significa que Node.js puede ejecutar código JavaScript de manera muy eficiente.
- Asincronía y No Bloqueo
Node.js utiliza un modelo de E/S no bloqueante y orientado a eventos, lo que lo hace muy adecuado para aplicaciones que requieren un alto rendimiento y escalabilidad, como servidores web y aplicaciones en tiempo real.
- Single-threaded
Aunque Node.js es de un solo hilo, puede manejar múltiples conexiones simultáneamente gracias a su modelo de E/S no bloqueante. Esto se logra mediante el uso de un bucle de eventos (event loop) que maneja las operaciones asincrónicas.
- Ecosistema de Módulos
Node.js tiene un ecosistema de módulos muy rico, conocido como npm (Node Package Manager), que permite a los desarrolladores compartir y reutilizar código fácilmente.
Ventajas de Usar Node.js
- Rendimiento: Gracias a su modelo de E/S no bloqueante y al motor V8, Node.js puede manejar un gran número de conexiones simultáneas con un alto rendimiento.
- Escalabilidad: Node.js es ideal para aplicaciones que necesitan escalar horizontalmente, como aplicaciones en tiempo real y microservicios.
- Ecosistema: Con más de un millón de paquetes disponibles en npm, los desarrolladores tienen acceso a una vasta cantidad de herramientas y bibliotecas.
- JavaScript en Todas Partes: Permite a los desarrolladores usar JavaScript tanto en el lado del cliente como en el servidor, lo que puede simplificar el desarrollo y la transferencia de conocimientos.
Ejemplo Práctico
Vamos a ver un ejemplo simple de un servidor HTTP en Node.js:
// Importamos el módulo http const http = require('http'); // Creamos un servidor que responde con "Hello, World!" a cada solicitud const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello, World!\n'); }); // El servidor escucha en el puerto 3000 server.listen(3000, '127.0.0.1', () => { console.log('Servidor corriendo en http://127.0.0.1:3000/'); });
Explicación del Código
-
Importación del Módulo HTTP:
const http = require('http');
- Importamos el módulo
http
que viene integrado con Node.js.
- Importamos el módulo
-
Creación del Servidor:
const server = http.createServer((req, res) => { ... });
- Utilizamos
http.createServer
para crear un nuevo servidor. Este método toma una función de callback que se ejecuta cada vez que el servidor recibe una solicitud.
- Utilizamos
-
Configuración de la Respuesta:
res.statusCode = 200;
: Establecemos el código de estado HTTP a 200, lo que significa "OK".res.setHeader('Content-Type', 'text/plain');
: Establecemos el tipo de contenido de la respuesta atext/plain
.res.end('Hello, World!\n');
: Enviamos la respuesta "Hello, World!" y finalizamos la respuesta.
-
Inicio del Servidor:
server.listen(3000, '127.0.0.1', () => { ... });
- Hacemos que el servidor escuche en el puerto 3000 y en la dirección IP
127.0.0.1
. Cuando el servidor comienza a escuchar, se ejecuta la función de callback que imprime un mensaje en la consola.
- Hacemos que el servidor escuche en el puerto 3000 y en la dirección IP
Ejercicio Práctico
Ejercicio 1: Crear un Servidor HTTP Básico
Objetivo: Crear un servidor HTTP que responda con "Hola, Mundo!" a cada solicitud.
Instrucciones:
- Crea un archivo llamado
server.js
. - Importa el módulo
http
. - Crea un servidor que responda con "Hola, Mundo!".
- Haz que el servidor escuche en el puerto 3000.
- Ejecuta el servidor y verifica que funcione correctamente.
Solución:
const http = require('http'); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hola, Mundo!\n'); }); server.listen(3000, '127.0.0.1', () => { console.log('Servidor corriendo en http://127.0.0.1:3000/'); });
Retroalimentación y Consejos
- Error Común: Olvidar llamar a
res.end()
. Esto hará que la solicitud quede pendiente y el navegador parecerá que está cargando indefinidamente. - Consejo: Siempre asegúrate de establecer el código de estado y el tipo de contenido de la respuesta para evitar problemas de compatibilidad con los clientes.
Conclusión
En esta lección, hemos aprendido qué es Node.js, sus características clave y cómo crear un servidor HTTP básico. Node.js es una herramienta poderosa para el desarrollo de aplicaciones del lado del servidor, y su modelo de E/S no bloqueante lo hace ideal para aplicaciones que requieren alta concurrencia y rendimiento. En el próximo módulo, profundizaremos en la configuración de Node.js y crearemos nuestro primer programa en Node.js.
Curso de Node.js
Módulo 1: Introducción a Node.js
Módulo 2: Conceptos Básicos
Módulo 3: Sistema de Archivos y E/S
Módulo 4: HTTP y Servidores Web
- Creando un Servidor HTTP Simple
- Manejo de Solicitudes y Respuestas
- Sirviendo Archivos Estáticos
- Enrutamiento
Módulo 5: NPM y Gestión de Paquetes
- Introducción a NPM
- Instalación y Uso de Paquetes
- Creación y Publicación de Paquetes
- Versionado Semántico
Módulo 6: Framework Express.js
- Introducción a Express.js
- Configuración de una Aplicación Express
- Middleware
- Enrutamiento en Express
- Manejo de Errores
Módulo 7: Bases de Datos y ORMs
- Introducción a las Bases de Datos
- Usando MongoDB con Mongoose
- Usando Bases de Datos SQL con Sequelize
- Operaciones CRUD
Módulo 8: Autenticación y Autorización
- Introducción a la Autenticación
- Usando Passport.js
- Autenticación JWT
- Control de Acceso Basado en Roles
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con Mocha y Chai
- Pruebas de Integración
- Depuración de Aplicaciones Node.js
Módulo 10: Temas Avanzados
- Módulo Cluster
- Hilos de Trabajo
- Optimización del Rendimiento
- Construcción de APIs RESTful
- GraphQL con Node.js
Módulo 11: Despliegue y DevOps
- Variables de Entorno
- Usando PM2 para la Gestión de Procesos
- Desplegando en Heroku
- Integración y Despliegue Continuos