Middlewares Nativos
Los middlewares en Fang JS siguen el Onion Model (Modelo de Cebolla). Esto permite ejecutar lógica antes de llegar a la ruta y después de que esta termine. Fang incluye tres middlewares fundamentales listos para usar.
CORS (Cross-Origin Resource Sharing)
Section titled “CORS (Cross-Origin Resource Sharing)”El middleware de cors gestiona las cabeceras de seguridad para permitir peticiones desde otros dominios y maneja automáticamente las peticiones OPTIONS (pre-flight).
import { cors } from "@fang-js/fang/middlewares";import { methods } from "@fang-js/fang/types";
app.use( cors({ origin: "http://127.0.0.1:5500", methods: [methods.GET, methods.POST, methods.PUT, methods.DELETE], }),);| Opción | Descripción |
|---|---|
origin | String, Array o ”*” para permitir dominios. |
methods | Métodos HTTP permitidos (Default: todos). |
allowedHeaders | Cabeceras personalizadas permitidas. |
credentials | Habilita el envío de cookies y cabeceras de auth. |
Auth (JWT Authentication)
Section titled “Auth (JWT Authentication)”Este middleware valida la presencia y la firma de un JSON Web Token en la cabecera Authorization: Bearer <token>. Si el token es válido, inyecta los datos del usuario en ctx.state.user.
import { auth } from "@fang-js/fang/middlewares";
// Aplicar a un grupo de rutas protegidasconst admin = app.group("/admin");admin.use(auth(process.env.JWT_SECRET));
admin.get("/dashboard", (ctx) => { const user = ctx.state.user; // Datos decodificados del JWT return ctx.ok({ welcome: user.username });});Serve Static (Archivos Estáticos)
Section titled “Serve Static (Archivos Estáticos)”Sirve archivos (imágenes, CSS, JS, etc.) desde un directorio local. Incluye un MIME_MAP interno muy completo y manejo de caché por defecto (1 día).
import { serveStatic } from "@fang-js/fang";
app.use( serveStatic("public", "/static", (ctx) => { ctx.notFound({ error: "Archivo no encontrado" }); }),);-
rootDir: Carpeta local (ej: “public”).
-
prefix: Prefijo en la URL para interceptar (ej: “/static”).
-
onError: Callback personalizado si el archivo no existe o hay un error de acceso.
Middlewares Personalizados
Section titled “Middlewares Personalizados”Puedes crear tus propios middlewares fácilmente. Solo recuerda usar await next() para no romper la cadena.
import type { Middleware } from "@fang-js/fang/types";
export const loggerMiddleware: Middleware = async (ctx, next) => { const start = Date.now(); await next(); console.log(`${ctx.req.method} - ${Date.now() - start}ms`);};¿Cómo registrarlos?
Section titled “¿Cómo registrarlos?”- Globales: app.use(myMiddleware) (Afecta a toda la app).
- Por Grupo: group.use(myMiddleware) (Afecta a las rutas del grupo).
- Por Ruta: app.get(“/ruta”, myMiddleware, (ctx) => …) (Solo esa ruta).