2-Web de Lista de Libros-Vistas (EJS)
Cómo Agregar un Sistema de Vistas con EJS en Node.js y Express
Si estás desarrollando una aplicación web con Node.js y Express, usar un motor de plantillas como EJS (Embedded JavaScript) puede simplificar la creación de vistas dinámicas. En este tutorial, te mostraré cómo configurar EJS en tu proyecto paso a paso.
Inicializar el proyecto
bash
npm init --yes
npm init -y
Express - El framework web
bash
npm install express
Morgan - Logger para desarrollo
bash
npm install morgan
Motor de plantillas
bash
npm install ejs
npm install
npm start
Métodos para Iniciar el Proyecto
a) npm run dev (Recomendado para desarrollo)
bash
npm run dev
Cómo funciona: Ejecuta el script "dev" definido en tu package.json
Requisito: Debes tener Nodemon instalado y configurado en package.json:
json
"scripts": {
"dev": "nodemon app.js"
}
Cómo funciona: Ejecuta el script "dev" definido en tu package.json
Requisito: Debes tener Nodemon instalado y configurado en package.json:
json
}
c) npm start (Para producción)
bash
npm start
Configuración típica:
json
"scripts": {
"start": "node app.js"
}
Configuración típica:
json
📦 Paso 1: Instalar EJS
Primero, instala el paquete EJS desde npm:
npm install ejs📂 Paso 2: Crear la Estructura de Carpetas
Organiza tu proyecto para incluir una carpeta views donde estarán tus plantillas:
mi-app/
├── node_modules/
├── views/ ← Nueva carpeta para las vistas
│ └── index.ejs ← Tu primera plantilla EJS
├── app.js ← Archivo principal
├── package.json
└── .gitignore Inicializar el proyecto
bash
npm init --yes
npm init -ynpm init
npm init Express - El framework web
bash
npm install express
Morgan - Logger para desarrollo
bash
npm install morgan
npm install nodemon
npm install
npm start
Métodos para Iniciar el Proyecto
a) npm run dev (Recomendado para desarrollo)
bash
npm run dev
Cómo funciona: Ejecuta el script "dev" definido en tu package.json
Requisito: Debes tener Nodemon instalado y configurado en package.json:
json
"scripts": {
"dev": "nodemon app.js"
}
Cómo funciona: Ejecuta el script "dev" definido en tu package.json
Requisito: Debes tener Nodemon instalado y configurado en package.json:
json
}
c) npm start (Para producción)
bash
npm start
Configuración típica:
json
"scripts": {
"start": "node app.js"
}
Configuración típica:
json
⚙️ Paso 3: Configurar Express para Usar EJS
Modifica tu app.js para configurar EJS como motor de plantillas:
const express = require('express');
const path = require('path'); // Para manejar rutas de archivos
const app = express();
// Configuración de EJS
app.set('views', path.join(__dirname, 'views')); // Define la carpeta de vistas
app.set('view engine', 'ejs'); // Establece EJS como motor de plantillas
// Ruta principal que renderiza index.ejs
app.get('/', (req, res) => {
res.render('index', { titulo: 'Mi App Web' }); // Pasa datos a la vista
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Servidor en http://localhost:${PORT}`);
});🖥️ Paso 4: Crear tu Primera Vista (index.ejs)
Dentro de views/index.ejs, crea una plantilla HTML con sintaxis EJS para mostrar datos dinámicos:
<!DOCTYPE html>
<html>
<head>
<title><%= titulo %></title>
</head>
<body>
<h1>Bienvenido a <%= titulo %></h1>
<p>Esta es mi primera vista con EJS</p>
</body>
</html>🔹 ¿Qué hace este código?
<%= titulo %> → Renderiza la variable titulo que pasamos desde res.render().
EJS permite incrustar JavaScript directamente en HTML para contenido dinámico.
<%= titulo %> → Renderiza la variable titulo que pasamos desde res.render().
EJS permite incrustar JavaScript directamente en HTML para contenido dinámico.
🚀 ¡Listo!
Ahora, al acceder a http://localhost:3000, verás tu página renderizada con el título dinámico.
💡 Conclusión
EJS es una excelente opción para generar vistas dinámicas en Node.js de manera sencilla. Puedes extenderlo con layouts, partials y lógica más compleja según tus necesidades.
¿Quieres aprender más sobre EJS? ¡Déjame un comentario! 👇
🔗 Posibles mejoras para futuros posts:
Uso de layouts y partials en EJS.
Pasar datos más complejos (arrays, objetos).
Integración con bases de datos para contenido dinámico.
Uso de layouts y partials en EJS.
Pasar datos más complejos (arrays, objetos).
Integración con bases de datos para contenido dinámico.
¡Espero que este post te sea útil! Si te gustó, compártelo en tus redes.
========================================
Pasos siguientes para expandir:
Agregar Archivos Estáticos (public)
app.set('views', path.join(__dirname, 'views'))
- Explicación
Esta línea de código en Express.js realiza dos funciones importantes:
1. app.set('views', ...)
Establece el directorio donde Express buscará las plantillas (views) para renderizar.
Express necesita saber dónde están almacenados tus archivos de plantillas (como
index.ejs,about.ejs, etc.)Por defecto, Express buscaría en un directorio llamado
viewsen el directorio raíz, pero esto lo hace explícito
2. path.join(__dirname, 'views')
Construye la ruta completa al directorio de vistas:
__dirname: Variable global en Node.js que contiene la ruta absoluta del directorio donde se encuentra el archivo actual (app.js)path.join(): Une segmentos de ruta de manera compatible con cualquier sistema operativo'views': Nombre de la carpeta donde estarán tus plantillas
¿Por qué es importante?
Organización: Mantiene todas tus plantillas en un lugar específico
Portabilidad: Al usar rutas absolutas (con
__dirname), tu aplicación funcionará sin importar desde dónde la ejecutesSeguridad: Limita desde dónde Express puede cargar plantillas
Ejemplo práctico
Si tu estructura es:
/proyecto
/node_modules
/views ← aquí están index.ejs, about.ejs
app.js ← este archivoCuando usas path.join(__dirname, 'views') en app.js, el resultado será algo como:
En Windows:
C:\proyecto\viewsEn Linux/Mac:
/home/usuario/proyecto/views
Así Express sabrá exactamente dónde buscar tus plantillas sin importar el sistema operativo.
Explicación de app.get() y res.render()
Esta parte del código define una ruta básica en tu aplicación Express. Vamos a desglosarla:
app.get('/', ...)
app.get: Método que define cómo manejar solicitudes HTTP GET a una ruta específica'/': Es la ruta raíz de tu aplicación (la página principal, comowww.tusitio.com/)
La función callback (req, res) => {...}
Se ejecuta cuando alguien visita la ruta /. Recibe dos parámetros:
req(request): Contiene información sobre la solicitud HTTP (datos del cliente, parámetros, etc.)res(response): Objeto para enviar respuestas al cliente
res.render('index', { title: 'Mi App' })
res.render(): Método para renderizar una plantilla (view) y enviarla como respuesta'index': Nombre de la plantilla a renderizar (buscaráviews/index.ejs){ title: 'Mi App' }: Objeto con datos que pasas a la plantilla
Flujo completo
Un usuario visita
http://tudominio.com/(hace una petición GET a/)Express ejecuta esta función callback
Renderiza la plantilla
index.ejscon los datos proporcionadosEnvía el HTML resultante al navegador del usuario
Ejemplo con archivos
Supongamos que tienes:
/views
index.ejsindex.ejs podría contener:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1>Bienvenido a <%= title %></h1>
</body>
</html>El resultado final que vería el usuario sería:
<!DOCTYPE html>
<html>
<head>
<title>Mi App</title>
</head>
<body>
<h1>Bienvenido a Mi App</h1>
</body>
</html>¿Por qué es importante?
Define el punto de entrada principal de tu aplicación web
Combina la lógica del servidor con la presentación (plantillas)
Permite pasar datos dinámicos a tus vistas
Es la base sobre la que construirás rutas más complejas
Pasos siguientes para expandir:
Agregar Archivos Estáticos (public)
git remoto agregar origen https://github.com/SaulSoteloSuastegui/node-libros.git git rama -M principal
git push -u origen principal
git push -u origen principal
Comentarios
Publicar un comentario