La Clase Fang
La clase Fang es la columna vertebral de tu aplicación. Es una capa ligera construida sobre el módulo nativo http de Node.js que gestiona el enrutamiento, los middlewares y el ciclo de vida de las peticiones.
Métodos de Enrutamiento (HTTP)
Section titled “Métodos de Enrutamiento (HTTP)”Fang proporciona métodos intuitivos para registrar rutas. Cada método acepta una ruta y una secuencia de middlewares (incluyendo el controlador final).
app.get(), post(), put(), patch(), delete()
Section titled “app.get(), post(), put(), patch(), delete()”Registra una ruta para un método HTTP específico.
app.get("/users", (ctx) => ctx.ok(users));app.post("/users", async (ctx) => { const data = await ctx.body(UserSchema); // ... lógica});Gestión de Middlewares
Section titled “Gestión de Middlewares”app.use(middleware)
Section titled “app.use(middleware)”Registra un middleware global. Estos middlewares se ejecutan en todas las peticiones que entren al servidor, antes de los middlewares específicos de cada ruta.
app.use(async (ctx, next) => { const start = Date.now(); await next(); // Pasa al siguiente middleware o ruta console.log(`Tiempo de respuesta: ${Date.now() - start}ms`);});Organización y Modularización
Section titled “Organización y Modularización”app.group(prefix, callback?)
Section titled “app.group(prefix, callback?)”Crea un grupo de rutas con un prefijo común. Es la herramienta principal para mantener tu código organizado y modular.
-
prefix: El path base (ej: /api/v1).
-
callback: (Opcional) Una función que recibe una instancia de RouteGroup.
// Definición modularapp.group("/api/v1", (group) => { group.get("/profile", (ctx) => { ... });});
// O usando una clase controlador con método estático (Recomendado)app.group("/api/v2", UserController.register);Configuración del Servidor
Section titled “Configuración del Servidor”app.setTimeout(ms)
Section titled “app.setTimeout(ms)”Establece un tiempo de espera global para todas las peticiones. Si el servidor no responde en el tiempo indicado, Fang enviará automáticamente un error 504 Gateway Timeout.
app.setTimeout(5000); // 5 segundos de timeoutapp.onError(handler)
Section titled “app.onError(handler)”Define un manejador de errores global personalizado. Si no se define, Fang usará su manejador genérico que devuelve un error 500 o el estatus de una HttpException.
app.onError((err, ctx) => { console.error("Error capturado:", err.message); ctx.json({ success: false, error: err.name, message: err.message }, 500);});app.listen(port?, callback?)
Section titled “app.listen(port?, callback?)”-
port: Puerto a escuchar (Por defecto: 3000).
-
callback: Función que se ejecuta cuando el servidor está listo. Si no se provee, Fang muestra un log estilizado automáticamente.
app.listen(8080, () => { console.log("Cazando en el puerto 8080... 🐺");});Flujo de Ejecución Interna
Section titled “Flujo de Ejecución Interna”Para entender cómo Fang procesa tus peticiones, este es el orden jerárquico:
- Request Timeout: Se inicia el contador de tiempo configurado.
- Context Creation: Se crea el objeto ctx unificando req y res.
- Global Middlewares: Se ejecutan todos los app.use().
- Route Matching: Se busca la ruta en el Router.
- Route Middlewares: Se ejecutan los middlewares específicos de la ruta encontrada.
- Execution: Se ejecuta la lógica final del endpoint.
- Error Handling: Si algo falla en cualquier punto, salta al onError.