Skip to content

bert27/server-node

Repository files navigation

Server Node

Proyecto Node.js con TypeScript.

Comandos Utilizados

Inicialización del Proyecto

Para iniciar el proyecto con un package.json por defecto:

npm init -y

Instalación de Dependencias

Instalar TypeScript y herramientas de desarrollo:

npm install -D typescript ts-node @types/node

Configuración de TypeScript

Generar el archivo tsconfig.json por defecto:

4. Estructura de Directorios y Alias

El proyecto utiliza Alias de Importación (@/) para evitar rutas relativas largas (../../../).

  • @/ apunta a src/.
  • Ejemplo: import { User } from '@/features/users/users.model';

5. Scripts Disponibles

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 carpeta dist.
  • npm start: Ejecuta el código compilado.
  • npx tsc --noEmit: Comprueba errores de TypeScript sin generar archivos (útil para validación).

Paso 2: Hot Reloading

Para desarrollo, se ha configurado nodemon para reiniciar automáticamente el servidor al detectar cambios en los archivos.

  1. Instalación de nodemon (ya incluido en devDependencies):
    npm install -D nodemon
  2. Configuración: Se ha creado el archivo nodemon.json y actualizado el script dev en package.json.
  3. Uso:
    npm run dev

Paso 3: Servidor Express y Variables de Entorno

Se ha integrado express como servidor web y dotenv para la gestión de variables de entorno.

  1. Instalación:

    npm install express dotenv
    npm install -D @types/express
    npm install express dotenv && npm install -D @types/express
  2. Configuración:

    • Crear un archivo .env en 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.
  3. Ejecución: El servidor se iniciará en el puerto definido.

    Porbar con curl http://localhost:4000

Paso 4: Archivos Estáticos

Configuración para servir archivos estáticos (HTML, CSS, imágenes) desde la carpeta public.

  1. Código: Se ha añadido app.use(express.static('public')).
  2. Uso: Cualquier archivo en la carpeta public será accesible.

Paso 5: Refactorización MVC

Se ha reorganizado el proyecto en controllers y routes para mantener el código limpio.

  1. Modelos: src/models (Interfaces de TypeScript).
  2. Controladores: src/controllers (Lógica de negocio).
  3. Rutas: src/routes (Definición de endpoints).

Paso 6: CORS y Configuración de Puerto

Se ha configurado CORS para permitir peticiones desde el frontend y cambiado el puerto.

  1. Instalación:
    npm install cors
    npm install -D @types/cors
  2. Configuración:
    • Permitido origen: http://localhost:3000.

Paso 7: Módulo de Configuración "Professional"

Se ha centralizado la configuración con Tipado Fuerte (TypeScript).

  1. Tipos: src/config/types.ts define la interfaz obligatoria.
  2. Entornos:
    • development.ts: Configuración por defecto para desarrollo.
    • production.ts: Lee estrictamente de variables de entorno.
  3. Uso: src/index.ts importa config y olvida los detalles de process.env.

Paso 8: Scripts de NPM (Cross-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).

Paso 9: Arquitectura de Errores y Validación

  1. Manejo de Errores Global:

    • src/middlewares/error.handler.ts: Captura errores.
    • Desarrollo: Muestra stack trace.
    • Producción: Mensaje genérico seguro.
  2. 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.

Paso 10: Tests Automatizados (Jest + Supertest)

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.

Replicar el Proyecto desde Cero

Si quieres crear un proyecto nuevo e instalar las mismas dependencias manualmente:

Dependencias de Producción:

npm install cors dotenv express mongoose zod

Dependencias 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

About

API REST starter kit con Node.js, TypeScript, MongoDB, Express y Jest.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published