Proyecto Node.js con TypeScript.
Para iniciar el proyecto con un package.json por defecto:
npm init -yInstalar TypeScript y herramientas de desarrollo:
npm install -D typescript ts-node @types/nodeGenerar el archivo tsconfig.json por defecto:
El proyecto utiliza Alias de Importación (@/) para evitar rutas relativas largas (../../../).
@/apunta asrc/.- Ejemplo:
import { User } from '@/features/users/users.model';
En el package.json se han configurado los siguientes scripts:
"scripts": {
"build": "tsc",
"start": "node dist/index.js",
"dev": "ts-node src/index.ts"
}npm run dev: Ejecuta el código fuente directamente (para desarrollo).npm run build: Compila el código TypeScript a JavaScript en la carpetadist.npm start: Ejecuta el código compilado.npx tsc --noEmit: Comprueba errores de TypeScript sin generar archivos (útil para validación).
Para desarrollo, se ha configurado nodemon para reiniciar automáticamente el servidor al detectar cambios en los archivos.
- Instalación de nodemon (ya incluido en devDependencies):
npm install -D nodemon
- Configuración: Se ha creado el archivo
nodemon.jsony actualizado el scriptdevenpackage.json. - Uso:
npm run dev
Se ha integrado express como servidor web y dotenv para la gestión de variables de entorno.
-
Instalación:
npm install express dotenv npm install -D @types/express npm install express dotenv && npm install -D @types/express -
Configuración:
- Crear un archivo
.enven la raíz (basado en.env.example). PORT=4000: Puerto del servidor.NODE_ENV=development: Entorno (development/production).CORS_ORIGIN=http://localhost:3000: Origen permitido para CORS.
- Crear un archivo
-
Ejecución: El servidor se iniciará en el puerto definido.
Porbar con curl http://localhost:4000
Configuración para servir archivos estáticos (HTML, CSS, imágenes) desde la carpeta public.
- Código: Se ha añadido
app.use(express.static('public')). - Uso: Cualquier archivo en la carpeta
publicserá accesible.
Se ha reorganizado el proyecto en controllers y routes para mantener el código limpio.
- Modelos:
src/models(Interfaces de TypeScript). - Controladores:
src/controllers(Lógica de negocio). - Rutas:
src/routes(Definición de endpoints).
Se ha configurado CORS para permitir peticiones desde el frontend y cambiado el puerto.
- Instalación:
npm install cors npm install -D @types/cors
- Configuración:
- Permitido origen:
http://localhost:3000.
- Permitido origen:
Se ha centralizado la configuración con Tipado Fuerte (TypeScript).
- Tipos:
src/config/types.tsdefine la interfaz obligatoria. - Entornos:
development.ts: Configuración por defecto para desarrollo.production.ts: Lee estrictamente de variables de entorno.
- Uso:
src/index.tsimportaconfigy olvida los detalles deprocess.env.
Se han automatizado los entornos con comandos:
npm run dev: Desarrollo con Hot Reload (NODE_ENV=development).npm start: Desarrollo compilado (NODE_ENV=development).npm run start:prod: Producción (NODE_ENV=production).
-
Manejo de Errores Global:
src/middlewares/error.handler.ts: Captura errores.- Desarrollo: Muestra stack trace.
- Producción: Mensaje genérico seguro.
-
Validación de Datos (Zod):
src/middlewares/validation.middleware.ts: Valida requests.users.schema.ts: Define reglas (ej. nombre obligatorio).- Si falla, devuelve HTTP 400 con detalles del error.
Infraestructura de pruebas de integración para asegurar la calidad del código.
- Comando:
npm test - Tecnologías:
jest,ts-jest,supertest. - Cobertura: Verifica endpoints (GET, POST, DELETE), códigos de estado (200, 201, 400, 404) y respuestas JSON.
Si quieres crear un proyecto nuevo e instalar las mismas dependencias manualmente:
Dependencias de Producción:
npm install cors dotenv express mongoose zodDependencias de Desarrollo:
npm install -D @types/cors @types/express @types/jest @types/mongoose @types/node @types/supertest cross-env jest mongodb-memory-server nodemon supertest ts-jest ts-node tsc-alias tsconfig-paths tsx typescript