❓ Preguntas Frecuentes (FAQ)
Esta sección contiene respuestas a las preguntas más comunes sobre Fox Framework. Si no encuentras la respuesta que buscas, no dudes en consultar nuestra documentación completa o contactar con la comunidad.
🚀 Primeros Pasos
¿Qué es Fox Framework?
Fox Framework es un framework web moderno para TypeScript/Node.js que proporciona una arquitectura escalable y herramientas integradas para desarrollar aplicaciones web robustas. Incluye sistema de routing, motor de templates, CLI, cache, logging y mucho más.
¿Por qué elegir Fox Framework sobre Express?
Fox Framework construye sobre Express pero agrega:
- Estructura organizada: Arquitectura predefinida y mejores prácticas
- TypeScript first: Tipado completo y mejor experiencia de desarrollo
- Herramientas integradas: CLI, cache, logging, validación sin configuración extra
- Escalabilidad: Patrones de diseño para aplicaciones grandes
- Monitoreo: Métricas y observabilidad incluidas
¿Fox Framework es compatible con el ecosistema de Express?
Sí, completamente. Fox Framework está construido sobre Express, por lo que puedes usar cualquier middleware, librería o herramienta del ecosistema de Express sin problemas.
¿Qué versión de Node.js necesito?
Fox Framework requiere Node.js 18.0 o superior. Recomendamos usar la versión LTS más reciente para mejor estabilidad y rendimiento.
📦 Instalación y Configuración
¿Cómo instalo Fox Framework?
# Opción 1: Uso directo sin instalación global (recomendado)
npx -p @foxframework/core tsfox new mi-proyecto
cd mi-proyecto
npm install
npm run dev
# Opción 2: Instalación global (para usar 'tsfox' directamente)
npm install -g @foxframework/core
tsfox new mi-proyecto
npm install && npm run dev¿Puedo usar Fox Framework en un proyecto existente?
Sí, instala el paquete core y crea tu instancia:
npm install @foxframework/coreimport { FoxFactory } from '@foxframework/core';
const app = FoxFactory.createInstance({
port: 3000,
routes: './src/routes'
});
app.start();¿Cómo configuro la base de datos?
Fox Framework soporta múltiples bases de datos:
const server = FoxFactory.createServer({
database: {
type: 'postgresql', // postgresql, mysql, sqlite, mongodb
url: 'postgresql://user:pass@localhost:5432/mydb',
// opciones adicionales
}
});🏗️ Arquitectura y Desarrollo
¿Debo seguir una estructura de carpetas específica?
Recomendamos esta estructura, pero es flexible:
src/
├── controllers/ # Lógica de controladores
├── services/ # Lógica de negocio
├── models/ # Modelos de datos
├── middleware/ # Middleware personalizado
├── routes/ # Definición de rutas
├── config/ # Configuración
└── utils/ # Utilidades¿Cómo manejo la autenticación?
Fox Framework incluye middleware de autenticación:
import { AuthMiddleware } from '@foxframework/auth-jwt';
// Configurar JWT
const authConfig = {
jwt: {
secret: 'tu-secreto',
expiresIn: '7d'
}
};
// Usar en rutas
router.get('/protected', AuthMiddleware.jwt(authConfig), controller.method);¿Puedo usar otros ORMs además del incluido?
Sí, Fox Framework es ORM-agnóstico. Puedes usar:
- Prisma
- TypeORM
- Sequelize
- Mongoose (para MongoDB)
- O cualquier otro ORM/ODM
¿Cómo implemento validación de datos?
Fox Framework incluye validación integrada:
import { ValidationMiddleware, Schema } from '@foxframework/validation';
const userSchema = Schema.object({
name: Schema.string().min(2).max(50),
email: Schema.string().email(),
age: Schema.number().min(18)
});
router.post('/users',
ValidationMiddleware.body(userSchema),
userController.create
);🔧 Funcionalidades Específicas
¿Cómo funciona el sistema de cache?
Fox Framework incluye múltiples estrategias de cache:
import { Cache } from '@foxframework/cache';
// Cache en memoria
const memoryCache = Cache.memory();
// Cache con Redis
const redisCache = Cache.redis({
url: 'redis://localhost:6379'
});
// Uso
await cache.set('key', 'value', 3600); // TTL 1 hora
const value = await cache.get('key');¿Puedo usar WebSockets?
Sí, Fox Framework soporta WebSockets:
import { SocketController } from '@foxframework/websockets';
class ChatController extends SocketController {
onConnection(socket: Socket) {
socket.on('message', (data) => {
this.broadcast('message', data);
});
}
}¿Cómo implemento background jobs?
Usa el sistema de jobs integrado:
import { JobQueue } from '@foxframework/jobs';
const emailQueue = new JobQueue('email-queue');
// Agregar job
await emailQueue.add('send-welcome-email', {
userId: 123,
email: 'user@example.com'
});
// Procesar jobs
emailQueue.process('send-welcome-email', async (job) => {
await emailService.sendWelcomeEmail(job.data);
});🚢 Despliegue y Producción
¿Cómo despliego mi aplicación?
Actualmente el CLI expone un set inicial centrado en Docker y (experimental) deploy:
# Generar configuración docker
npx -p @foxframework/core tsfox docker init
# Construir imagen
npx -p @foxframework/core tsfox docker build
# Ejecutar contenedor
npx -p @foxframework/core tsfox docker run --port 3000:3000
# Orquestar con docker-compose
npx -p @foxframework/core tsfox docker compose up -d
# (Experimental) Deploy
npx -p @foxframework/core tsfox deploy --interactiveRoadmap (no implementado aún en CLI actual): vercel/heroku/aws helpers dedicados.
¿Qué configuraciones necesito para producción?
Configuración mínima para producción:
NODE_ENV=production
DATABASE_URL=tu-url-de-bd
REDIS_URL=tu-url-de-redis
JWT_SECRET=secreto-ultra-seguro
LOG_LEVEL=info¿Cómo monitoreo mi aplicación?
Fox Framework incluye métricas automáticas:
// Métricas automáticas disponibles en /metrics
- http_requests_total
- http_request_duration_seconds
- nodejs_memory_usage
- database_connections_active
// Health check en /health🐛 Debugging y Troubleshooting
Mi aplicación es lenta, ¿cómo optimizo?
🔗 Error: 404 al ejecutar npx tsfox ...
Si ves un error E404 del registro npm al intentar npx tsfox new:
Causa: El binario tsfox vive dentro del paquete con scope @foxframework/core. Al no existir un paquete sin scope llamado tsfox, npx busca tsfox y obtiene 404.
Soluciones:
# Forma recomendada sin instalación global
npx -p @foxframework/core tsfox new mi-app
# O instala globalmente
npm install -g @foxframework/core
tsfox new mi-appVerifica con:
npx -p @foxframework/core tsfox --version❌ Comando tsfox no encontrado tras instalación global
- Asegura instalación global:
npm ls -g --depth=0 | grep foxframework- Revisa que tu
$PATHincluye el global npm bin:
echo "$PATH" | tr ':' '\n' | grep npm- Ubica la ruta de binarios:
npm bin -g- Si no aparece, reinstala:
npm uninstall -g @foxframework/core
npm install -g @foxframework/core🔐 El generador AI muestra error de API Key
Crear archivo fox-ai.config.json y exportar variable de entorno:
{
"provider": "openai",
"model": "gpt-4",
"temperature": 0.2,
"maxTokens": 2000,
"apiKey": "${OPENAI_API_KEY}"
}export OPENAI_API_KEY="tu-key"🐳 El comando docker build falla por plataforma
Si necesitas multi-arquitectura:
npx -p @foxframework/core tsfox docker build --platform linux/amd64Si usas Apple Silicon y apuntas a amd64, considera activar buildx y QEMU.
🐞 ¿Dónde reporto bugs?
- Revisa Issues existentes.
- Crea un nuevo Issue con:
- Pasos para reproducir
- Versión (
npx -p @foxframework/core tsfox --version) - Logs relevantes
- Sistema operativo
🧾 ¿Puedo seguir usando los comandos legacy generate:*?
Los comandos legacy (generate:controller, etc.) están obsoletos. Usa:
npx -p @foxframework/core tsfox generate controller Users --crud --service --test- Habilita el profiler:
import { Profiler } from '@foxframework/core';
Profiler.enable();- Verifica queries de BD:
// Habilita logging de queries lentas
database: {
logging: true,
slowQueryThreshold: 1000 // ms
}- Optimiza cache:
// Usa cache para datos frecuentes
const cachedData = await cache.remember('users:active', 3600, async () => {
return await userService.getActiveUsers();
});¿Cómo debuggeo errores en producción?
- Configura logging estructurado:
logging: {
level: 'info',
format: 'json',
transports: ['console', 'file']
}- Usa correlation IDs:
import { CorrelationMiddleware } from '@foxframework/logging';
app.use(CorrelationMiddleware());- Monitorea errores:
import { ErrorTracker } from '@foxframework/monitoring';
ErrorTracker.configure({
sentry: { dsn: 'tu-sentry-dsn' }
});Mi aplicación usa mucha memoria, ¿qué hago?
- Analiza memory leaks:
fox analyze:memory- Configura límites:
server: {
maxMemory: '512mb',
memoryWarningThreshold: 0.8
}- Optimiza cache:
cache: {
maxMemory: '128mb',
evictionPolicy: 'allkeys-lru'
}🔌 Extensibilidad
¿Puedo crear plugins para Fox Framework?
Sí, Fox Framework es altamente extensible:
import { Plugin } from '@foxframework/core';
class MiPlugin extends Plugin {
name = 'mi-plugin';
version = '1.0.0';
async install(app: FoxApplication) {
// Lógica de instalación
app.use(this.middleware);
}
private middleware = (req, res, next) => {
// Tu middleware personalizado
next();
};
}
// Registrar plugin
app.use(new MiPlugin());¿Cómo extiendo el CLI?
Puedes agregar comandos personalizados:
// commands/mi-comando.ts
import { Command } from '@foxframework/cli';
export class MiComando extends Command {
signature = 'mi-comando {nombre}';
description = 'Mi comando personalizado';
async handle() {
const nombre = this.argument('nombre');
this.info(`Hola ${nombre}!`);
}
}¿Puedo usar Fox Framework con GraphQL?
Sí, Fox Framework es compatible con GraphQL:
import { GraphQLModule } from '@foxframework/graphql';
const server = FoxFactory.createServer({
graphql: {
typeDefs: './schema.graphql',
resolvers: './resolvers',
playground: true
}
});🔄 Migración
¿Cómo migro desde Express?
La migración es gradual:
- Instala Fox Framework
- Reemplaza el servidor gradualmente:
// Antes (Express)
const express = require('express');
const app = express();
// Después (Fox Framework)
import { FoxFactory } from '@foxframework/core';
const app = FoxFactory.createServer();- Migra rutas una por una
- Adopta nuevas funcionalidades gradualmente
¿Puedo usar mis middlewares de Express existentes?
Sí, todos los middlewares de Express son compatibles:
import cors from 'cors';
import morgan from 'morgan';
const server = FoxFactory.createServer();
server.use(cors());
server.use(morgan('combined'));🌟 Mejores Prácticas
¿Cuáles son las mejores prácticas para estructurar mi código?
-
Separación de responsabilidades:
- Controllers: Manejo de HTTP
- Services: Lógica de negocio
- Repositories: Acceso a datos
-
Inyección de dependencias:
class UserController {
constructor(
private userService: UserService,
private emailService: EmailService
) {}
}- Validación de entrada:
router.post('/users', ValidationMiddleware.body(userSchema), controller.create);¿Cómo manejo errores de manera consistente?
Usa el manejador de errores global:
import { ErrorHandler } from '@foxframework/core';
app.use(ErrorHandler.global({
// No mostrar stack traces en producción
showStack: process.env.NODE_ENV === 'development',
// Log todos los errores
logErrors: true,
// Transformar errores para la API
transformError: (error) => ({
message: error.message,
code: error.code || 'INTERNAL_ERROR'
})
}));¿Cómo testseo mi aplicación?
Fox Framework incluye helpers para testing:
import { TestingModule } from '@foxframework/testing';
describe('UserController', () => {
let app: TestApplication;
beforeAll(async () => {
app = await TestingModule.createTestApp();
});
it('should create user', async () => {
const response = await app
.post('/api/users')
.send({ name: 'John', email: 'john@example.com' })
.expect(201);
expect(response.body.success).toBe(true);
});
});📚 Recursos Adicionales
¿Dónde encuentro más ejemplos?
¿Cómo contribuyo al framework?
- Fork del repositorio
- Crea una branch para tu feature
- Escribe tests
- Envía un Pull Request
Ver Guía de contribución para más detalles.
¿Dónde reporto bugs?
- GitHub Issues (opens in a new tab)
- Discord Community (opens in a new tab)
- Stack Overflow (opens in a new tab)
¿Hay soporte comercial disponible?
Sí, ofrecemos diferentes niveles de soporte:
- Community: Gratis, a través de GitHub y Discord
- Professional: Soporte por email con SLA
- Enterprise: Soporte dedicado y consultoría
Contacta con nosotros en support@fox-framework.com
💡 ¿No encontraste tu respuesta?
Si tu pregunta no está aquí:
- Busca en la documentación completa
- Revisa GitHub Issues (opens in a new tab)
- Pregunta en Discord (opens in a new tab)
- Crea un nuevo issue en GitHub
¡La comunidad de Fox Framework está aquí para ayudarte!