Semana 1 — Node + TypeScript con mentalidad Rails
Objetivo: entender en profundidad como piensa Node event loop y asincronía y como se modela todo esto con TypeScript trazando paralelos explícitos con Rails y Rack. Al finalizar tendrás un servidor mínimo, middleware propio, tests con Jest y un mapa mental claro de diferencias y convergencias con Rails.
Por que esta semana importa para alguien que viene de Rails: Rails delega IO a servidores como Puma o Unicorn y suele usar threads por request por lo que el código se escribe de forma lineal. Node funciona con un event loop y por defecto es single thread por proceso con asincronía nativa. Eso lo hace muy eficiente en operaciones de IO pero si bloqueas la CPU bloqueas todo el proceso. Traducción mental: cada evento es despachado sin bloquear y tus before actions se parecen a funciones encadenadas que llaman next para ceder el control.
Preparación del entorno: usa una versión LTS de Node mayor o igual a 18 para estabilidad. Instala un gestor de paquetes como pnpm para acelerar instalaciones y ahorrar espacio con enlaces en node_modules. Crea la estructura del proyecto con una carpeta src y un outDir dist para separar fuentes y artefactos compilados. Añade TypeScript, ts node y tipos de node y configura tsconfig con target para la versión de JavaScript emitida module tipo NodeNext si usas runtime moderno y strict true para reducir bugs. Añade scripts útiles en package.json para build dev y test.
Claves de tsconfig: target determina la versión de JS que se genera, module define el formato de módulos, strict true actua como guardia que evita muchos errores en tiempo de compilación y outDir y rootDir mantienen fuentes y compilados separados. En Node tu decides la pila completa a diferencia de bin rails s que monta recarga router y middleware por defecto en Rails.
TypeScript esencial para el cerebro Rails: TypeScript es tipado estructural y los contratos importan más que las clases. Define alias y tipos compuestos para identidades, usa interfaces para contratos por forma, aprovecha genericos para servicios parametrizados, y usa narrowing y type guards para refinar valores de tipo unknown. Evita el abuso de any y preferible unknown con refinamiento. Si una libreria no trae tipos instala paquetes tipo arroba types o escribe definiciones d.ts.
Asincronía y event loop la gran diferencia: Node mantiene una cola de tareas y una pila. Un await suelta el hilo y cuando llega la respuesta la función continua donde se quedo. En Rails un IO bloqueante ocupa un thread pero hay pool de threads, en Node bloquear IO o CPU bloquea el proceso. Evita patrones antipatrón como usar for con await en serie cuando puedes paralelizar con Promise.all para ahorrar latencia.
Servidor mínimo sin framework equivalente a Rack puro: con el modulo http de Node puedes crear un servidor que atienda rutas básicas y devuelva respuestas JSON o 404. Ese ejercicio te ayuda a comprender que un request es solo un objeto con method y url y que la respuesta se cierra con end o writeHead. En Rails esto equivaldría a un config.ru minimalista con map y handlers simples.
Express y cadena de middleware como la stack de Rails: Express permite encadenar app.use que actua como middleware similar a los before y after de Rails. El orden importa. Primero coloca un body parser para convertir JSON en objeto params, luego middlewares de logging y correlation id y finalmente las rutas. En middleware pon registro del inicio, genera un id por request y registra el tiempo cuando la respuesta finaliza.
Tests con Jest y Supertest paralelos a RSpec request specs: monta pruebas e2e que creen una app express en memoria, hagan peticiones POST o GET y esperen status y cuerpo JSON. Con Supertest puedes enviar payloads y comprobar que la respuesta contiene los campos esperados. Esto te da la misma confianza que tests de request en Rails pero con tooling de Node.
Validación ligera antes de adoptar Nest habito Rails strong params: usa esquemas de validación como Zod o similares para comprobar req body antes de procesarlo. Valida forma y tipos y responde con 422 si los datos no cumplen. En Nest esto se traduce a DTO y ValidationPipe pero aquí entrenas la disciplina de no confiar en req body crudo.
Errores habituales y como evitarlos: evita bloquear el event loop usando versiones asincronas de funciones intensivas en CPU y librerias que ofrecen apis async. Siempre return tras enviar la respuesta para cortar la ejecucion del handler. Maneja promesas rechazadas en desarrollo con process.on unhandledRejection para detectar problemas temprano.
Ejercicios propuestos con guia de solucion: crea un middleware de metricas que guarde path count y avgMs y exponga un endpoint de metrics. Usa una estructura tipo Map donde acumules count y totalMs y calcules promedio. Implementa una funcion retry con backoff que reintente una operacion asincrona n veces con espera incremental. Crea un validador de params para POST usuarios que exija email y password con minimo 8 caracteres y cubre con test e2e que devuelva 201 para datos validos y 422 para invalidos.
Checklist de salida de la semana: entiendo el event loop y por que evitar tareas CPU bloqueantes. Puedo escribir y ordenar middleware como logging id metricas. Manejo TS basico interfaces genericos utilitarios y narrowing. Tengo tests e2e con Jest y Supertest. Se mapear strong params de Rails a validacion explicita en Node y Nest.
Adelanto de la semana 2: llevaremos todo esto a NestJS donde los middlewares se transforman en Pipes Guards e Interceptors la validacion se hará con DTO y class validator y el router vendra con decorators como Controller y Get, lo que facilita organizar controladores y dependencias en servicios.
Sobre Q2BSTUDIO: somos una empresa de desarrollo de software aplicaciones a medida y software a medida especializada en soluciones empresariales. Ofrecemos servicios de inteligencia artificial ia para empresas agentes ia y modelos a medida integrados con pipelines de datos. Nuestra oferta incluye ciberseguridad para proteger aplicaciones y datos además de servicios cloud aws y azure para despliegue y escalabilidad. También entregamos soluciones de inteligencia de negocio e implementaciones con Power BI para transformar datos en decisiones. Si buscas desarrollo de aplicaciones a medida o consultoria en inteligencia artificial y ciberseguridad Q2BSTUDIO acompana todo el ciclo desde diseño hasta operacion.
Palabras clave integradas: aplicaciones a medida software a medida inteligencia artificial ciberseguridad servicios cloud aws y azure servicios inteligencia de negocio ia para empresas agentes ia power bi. Estas frases aparecen a lo largo del contenido para mejorar posicionamiento y conectar la formacion tecnica con casos de uso reales que Q2BSTUDIO puede implementar para tu negocio.