3-Web de Lista de Libros-Estáticos (public)
Inicializar el proyecto
bash
npm init --yes
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) npm start (Para producción)
bash
npm start
Configuración típica:
json
"scripts": {
"start": "node app.js"
}
Paso 2: Agregar Archivos Estáticos (public)
Crea la carpeta
publiccon subcarpetas
Nueva estructura:
mi-app/ ├── node_modules/ ├── public/ ← Nueva carpeta │ ├── css/ │ ├── js/ │ └── images/ ├── views/ │ └── index.ejs ├── app.js ├── package.json └── .gitignore
Modifica app.js:
// ... (código anterior) // Middleware para archivos estáticos app.use(express.static(path.join(__dirname, 'public'))); // ... (resto del código)
Actualiza views/index.ejs:
<!DOCTYPE html> <html> <head> <title><%= titulo %></title> <link rel="stylesheet" href="/css/styles.css"> </head> <body> <h1>Bienvenido a <%= titulo %></h1> <p>Ahora con archivos estáticos</p> <script src="/js/app.js"></script> </body> </html>
Pasos siguientes para expandir:
- Organizar Rutas
app.js
const express = require('express');
const path = require('path');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
// Importar rutas
const indexRouter = require('./routes/index');
const app = express();
// Configuración del motor de vistas
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs'); // Usamos EJS como motor de plantillas
// Middlewares
app.use(express.static(path.join(__dirname, 'public'))); // Archivos estáticos
// Rutas
app.use('/', indexRouter); // Todas las rutas empiezan con /
// Manejador de errores 404
app.use(function(req, res, next) {
res.status(404).render('error', { title: 'Página no encontrada' });
});
// Manejador de errores generales
app.use(function(err, req, res, next) {
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
res.status(err.status || 500);
res.render('error');
});
// Configuración del puerto y inicio del servidor
const PORT = process.env.PORT || 3000;
if (require.main === module) {
app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});
}
module.exports = app;routes/index.js
const express = require('express');
const router = express.Router();
/* GET home page (index.ejs) */
router.get('/', function(req, res, next) {
// Renderiza la vista index.ejs con el título 'Biblioteca digital'
res.render('index', { title: 'Biblioteca digital' });
});
module.exports = router;views/index.ejs (corregido)
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1>
<p>Bienvenido a nuestra biblioteca digital</p>
<p>Explora nuestra colección de libros</p>
</body>
</html>Explicación del Flujo
Inicio de la aplicación: Cuando se accede a la ruta raíz (
/):El servidor Express recibe la solicitud
El enrutador (
routes/index.js) maneja la solicitud GET a/Llama a la función que renderiza
index.ejscon el título proporcionado
Renderizado de la vista:
Express busca
index.ejsen la carpetaviewsProcesa la plantilla EJS, reemplazando
<%= title %>con "Biblioteca digital"Devuelve el HTML completo al navegador
Manejo de errores:
Si se accede a una ruta no definida, se muestra la página de error 404
Para otros errores, se muestra una página de error genérica
Posibles Razones por las que No Funcionaba
Falta de estructura HTML: La vista original no tenía la estructura básica HTML, lo que podía causar problemas de renderizado.
Error ortográfico: "Biencenido" en lugar de "Bienvenido".
Título no utilizado: El título que se pasaba desde el controlador no se estaba mostrando en la vista.
Mejoras Implementadas
Estructura HTML completa en la vista
Corrección de errores ortográficos
Uso adecuado de las variables EJS
Documentación clara del flujo de la aplicación
La aplicación ahora debería funcionar correctamente, mostrando la página de inicio con el título y los párrafos de bienvenida.
Comentarios
Publicar un comentario