¿Por qué configurar bien el entorno?
Una configuración correcta del entorno de desarrollo es fundamental por varias razones:
- Consistencia: Todos los desarrolladores del equipo trabajarán con la misma configuración
- Productividad: Herramientas bien configuradas aceleran el desarrollo
- Depuración: Un entorno bien configurado facilita encontrar y resolver errores
- Reproducibilidad: El proyecto funcionará igual en diferentes máquinas
Requisitos previos
Antes de comenzar, asegúrate de tener instalado:
| Herramienta | Versión mínima | Verificar instalación |
|---|---|---|
| Node.js | 18.x LTS | node --version |
| npm | 9.x | npm --version |
| Git | 2.x | git --version |
| Editor de código | - | VS Code recomendado |
nvm (Node Version Manager) para gestionar múltiples versiones de Node.js. Esto es especialmente útil cuando trabajas en diferentes proyectos que requieren versiones distintas.Paso 1: Crear la estructura del proyecto
- Abre tu terminal y crea una nueva carpeta para tu proyecto
mkdir mi-api-rest-express
cd mi-api-rest-express- Inicializa el proyecto con npm
npm init -yEsto creará un archivo package.json básico. Sin embargo, para un proyecto profesional, te recomiendo inicializarlo manualmente para configurar todos los campos correctamente:
npm initResponde las preguntas interactivamente:
| Campo | Recomendación | Ejemplo |
|---|---|---|
| package name | Usa kebab-case | mi-api-rest-express |
| version | Siempre 1.0.0 inicial | 1.0.0 |
| description | Describe brevemente el proyecto | API RESTful con Node.js y Express |
| entry point | Usa src/index.js | src/index.js |
| test command | Lo configuraremos después | npm test |
| git repository | Si usas Git | [email protected]:user/repo.git |
| keywords | Palabras clave útiles | node, express, api, rest |
| author | Tu nombre | Tu Nombre |
| license | MIT para proyectos open source | MIT |
Paso 2: Estructura de carpetas profesional
Una buena estructura de carpetas es esencial para mantener tu código organizado y escalable:
mi-api-rest-express/
├── src/
│ ├── controllers/ # Lógica de los endpoints
│ ├── routes/ # Definición de rutas
│ ├── models/ # Modelos de datos
│ ├── middleware/ # Funciones intermedias
│ ├── config/ # Configuración de la app
│ ├── utils/ # Funciones utilitarias
│ └── index.js # Punto de entrada
├── tests/ # Archivos de pruebas
├── .env # Variables de entorno
├── .env.example # Plantilla de variables
├── .gitignore # Archivos ignorados por Git
├── package.json # Dependencias y scripts
└── README.md # Documentación del proyectomkdir -p src/{controllers,routes,models,middleware,config,utils} testsPaso 3: Instalar Express y dependencias esenciales
Instala Express como dependencia principal:
npm install expressPara un proyecto profesional, necesitarás herramientas adicionales:
| Dependencia | Propósito | Comando |
|---|---|---|
| express | Framework web principal | npm install express |
| dotenv | Variables de entorno | npm install dotenv |
| morgan | Registro de peticiones HTTP | npm install morgan |
| cors | Habilitar CORS | npm install cors |
| helmet | Seguridad HTTP | npm install helmet |
Instala todas de una vez:
npm install express dotenv morgan cors helmetPaso 4: Configurar package.json correctamente
Modifica tu package.json para añadir scripts útiles y configuraciones profesionales:
{
"name": "mi-api-rest-express",
"version": "1.0.0",
"description": "API RESTful construida con Node.js y Express",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"dev": "node --watch src/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": ["node", "express", "api", "rest"],
"author": "Tu Nombre",
"license": "MIT"
}node --watch para recargar automáticamente cuando cambies archivos. En versiones anteriores necesitas herramientas como nodemon.Paso 5: Crear el archivo de configuración de entorno
Crea un archivo .env en la raíz del proyecto:
PORT=3000
NODE_ENV=development
DB_HOST=localhost
DB_PORT=5432
DB_NAME=mydb
DB_USER=myuser
DB_PASSWORD=mypasswordCrea también un archivo .env.example sin valores sensibles para compartir con otros desarrolladores:
PORT=3000
NODE_ENV=development
DB_HOST=localhost
DB_PORT=5432
DB_NAME=mydb
DB_USER=myuser
DB_PASSWORD=mypassword.env a Git. Asegúrate de que esté en tu .gitignore.Paso 6: Crear el archivo .gitignore
# Dependencias
node_modules/
# Variables de entorno
.env
.env.local
.env.*.local
# Logs
logs/
*.log
npm-debug.log*
# Sistema operativo
.DS_Store
Thumbs.db
# IDE
.vscode/
.idea/
*.swp
*.swo
# Archivos de pruebas
coverage/
# Build
dist/
build/Paso 7: Crear el archivo principal de la aplicación
Crea el archivo src/index.js con la configuración básica:
// src/index.js
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const morgan = require('morgan');
const app = express();
const PORT = process.env.PORT || 3000;
// Middlewares
app.use(helmet()); // Seguridad
app.use(cors()); // Habilitar CORS
app.use(morgan('dev')); // Registro de peticiones
app.use(express.json()); // Parsear JSON
app.use(express.urlencoded({ extended: true })); // Parsear URL-encoded
// Rutas de prueba
app.get('/', (req, res) => {
res.json({
message: 'API RESTful con Express',
version: '1.0.0',
status: 'running'
});
});
// Ruta de salud para verificar que el servidor está activo
app.get('/health', (req, res) => {
res.json({
status: 'healthy',
timestamp: new Date().toISOString()
});
});
// Iniciar servidor
app.listen(PORT, () => {
console.log(`🚀 Servidor ejecutándose en http://localhost:${PORT}`);
console.log(`📊 Entorno: ${process.env.NODE_ENV || 'development'}`);
});/health es muy útil para contenedores Docker, Kubernetes y balanceadores de carga que necesitan verificar si tu aplicación está respondiendo.Paso 8: Probar el servidor
Inicia el servidor con el script que configuramos:
npm startDeberías ver en la terminal:
🚀 Servidor ejecutándose en http://localhost:3000
📊 Entorno: developmentAbre tu navegador o Postman y visita:
http://localhost:3000/- Verás el mensaje de bienvenidahttp://localhost:3000/health- Verás el estado de salud
.env.Puedes añadir más configuraciones para producción:
// src/config/express.js
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const morgan = require('morgan');
function configureExpress(app) {
// Seguridad
app.use(helmet({
contentSecurityPolicy: false // Desactiva si usas CSP
}));
// CORS configurado
app.use(cors({
origin: process.env.CORS_ORIGIN || '*',
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],
allowedHeaders: ['Content-Type', 'Authorization']
}));
// Morgan con formato personalizado
app.use(morgan(':method :url :status :response-time ms - :res[content-length]'));
// Límite de tamaño de payload
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
// Compression (requiere npm install compression)
// app.use(compression());
}
module.exports = configureExpress;Ver más: Usar scripts de npm para diferentes entornosModifica tu package.json para scripts por entorno:
"scripts": {
"start": "node src/index.js",
"start:prod": "NODE_ENV=production node src/index.js",
"dev": "NODE_ENV=development nodemon src/index.js",
"test": "jest",
"test:watch": "jest --watch",
"lint": "eslint src/",
"lint:fix": "eslint src/ --fix"
}Resumen de lo aprendido
En esta lección hemos configurado un entorno de desarrollo profesional para crear APIs REST con Express. Los puntos clave son:
Creamos la estructura de carpetas siguiendo las mejores prácticasInicializamos el proyecto connpm initInstalamos Express y dependencias esenciales (helmet, cors, morgan, dotenv)Configuramos los scripts de npm para diferentes entornosCreamos archivos de configuración para variables de entornoEstructuramos el código principal con middlewares de seguridadProbamos que el servidor funciona correctamente
Un proyecto bien configurado desde el inicio nos ahorra tiempo y problemas a medida que el código crece.🧠 Quiz: Configuración del entorno Express¿Cuál es la función principal del middleware helmet en Express?
A) Aumentar la velocidad del servidorB) Implementar headers de seguridad HTTPC) Parsear bodies JSOND) Habilitar CORS automáticamente
✅ Respuesta correcta: B) Implementar headers de seguridad HTTP. Helmet configura diversos headers HTTP para hacer tu aplicación más segura, como X-Frame-Options, XSS Protection, Strict-Transport-Security, entre otros.🧠 Quiz: Configuración del entorno Express¿Por qué es importante crear un archivo .env.example?
A) Para que el proyecto funcione más rápidoB) Para documentar qué variables de entorno necesita el proyecto sin exponer valores sensiblesC) Para que npm instale las dependencias correctamenteD) No es importante, se puede omitir
✅ Respuesta correcta: B) El archivo .env.example sirve como documentación para otros desarrolladores, indicando qué variables necesitan configurar, sin exponer contraseñas o claves sensibles.🧠 Quiz: Configuración del entorno Express¿Cuál de las siguientes NO es una dependencia que instalamos?
A) expressB) dotenvC) mongooseD) cors
✅ Respuesta correcta: C) mongoose. Mongoose es un ODM (Object Data Modeling) para MongoDB. En esta lección instalamos express, dotenv, cors, helmet y morgan, pero no mongoose ya que eso corresponde a lecciones futuras sobre bases de datos.💡 Próximo paso: En la siguiente lección aprenderemos a estructurar rutas y controladores de manera modular, separando la lógica de tu API en archivos organizados.