Configuración
Referencia completa de configuración para aplicaciones YasuiJS usando yasui.createServer()
y yasui.createApp()
.
Visión General
YasuiJS proporciona dos formas principales de crear tu aplicación:
yasui.createServer(config)
- Crea e inicia un servidor HTTP automáticamenteyasui.createApp(config)
- Devuelve una aplicación Express para configuración manual
Ambos métodos aceptan el mismo objeto de configuración con las siguientes opciones.
Opciones de Configuración
Opciones Requeridas
controllers
Tipo: Array<Constructor>
Descripción: Array de clases controladoras para registrar en tu aplicación.
import { UserController, ProductController } from './controllers';
yasui.createServer({
controllers: [UserController, ProductController]
});
Opciones Opcionales
middlewares
Tipo: Array<Constructor | RequestHandler>
Por defecto: []
Descripción: Array de middlewares globales para aplicar a todas las peticiones. Pueden ser clases middleware de YasuiJS o funciones RequestHandler de Express.
import { LoggingMiddleware } from './middleware';
import cors from 'cors';
yasui.createServer({
controllers: [UserController],
middlewares: [LoggingMiddleware, cors()]
});
environment
Tipo: string
Por defecto: process.env.NODE_ENV || 'development'
Descripción: Nombre del entorno para tu aplicación.
yasui.createServer({
controllers: [UserController],
environment: 'production'
});
port
Tipo: number
Por defecto: 3000
Descripción: Número de puerto para el servidor HTTP. Solo se usa con createServer()
.
yasui.createServer({
controllers: [UserController],
port: 8080
});
debug
Tipo: boolean
Por defecto: false
Descripción: Habilita el modo debug con registro adicional y seguimiento de peticiones.
yasui.createServer({
controllers: [UserController],
debug: true
});
injections
Tipo: Array<{ token: string, provide: any }>
Por defecto: []
Descripción: Tokens de inyección personalizados para inyección de dependencias. Ver Inyección de Dependencias para más detalles.
yasui.createServer({
controllers: [UserController],
injections: [
{ token: 'DATABASE_URL', provide: 'postgresql://localhost:5432/mydb' },
{ token: 'CONFIG', provide: { apiKey: 'secret' } }
]
});
swagger
Tipo: SwaggerConfig | undefined
Por defecto: undefined
Descripción: Configuración de documentación Swagger. Ver Swagger para más detalles.
yasui.createServer({
controllers: [UserController],
swagger: {
enabled: true,
path: '/api-docs',
info: {
title: 'Mi API',
version: '1.0.0',
description: 'Documentación API'
}
}
});
enableDecoratorValidation
Tipo: boolean
Por defecto: true
Descripción: Habilita la validación de decoradores al inicio para detectar errores de configuración.
yasui.createServer({
controllers: [UserController],
enableDecoratorValidation: false
});
createServer() vs createApp()
createServer()
Crea un servidor HTTP e inicia la escucha automáticamente:
import yasui from 'yasui';
yasui.createServer({
controllers: [UserController],
port: 3000,
debug: true
});
// El servidor se inicia automáticamente y escucha en el puerto 3000
Usar cuando:
- Quieres iniciar tu servidor inmediatamente
- No necesitas configuración adicional de Express
- Estás construyendo una API simple
createApp()
Devuelve una aplicación Express para configuración manual:
import yasui from 'yasui';
const app = yasui.createApp({
controllers: [UserController]
});
// Agregar middleware personalizado de Express
app.use('/health', (req, res) => {
res.json({ status: 'ok' });
});
// Agregar rutas personalizadas
app.get('/custom', (req, res) => {
res.json({ message: 'Ruta personalizada' });
});
// Iniciar el servidor manualmente
app.listen(3000, () => {
console.log('Servidor ejecutándose en el puerto 3000');
});
Usar cuando:
- Necesitas configuración personalizada de Express
- Quieres agregar rutas o middleware personalizados
- Necesitas más control sobre el inicio del servidor
- Estás integrando con aplicaciones Express existentes
Ejemplos de Configuración
Configuración Básica de API
import yasui from 'yasui';
import { UserController, AuthController } from './controllers';
yasui.createServer({
controllers: [UserController, AuthController],
port: 3000,
debug: true
});
Configuración Completa
import yasui from 'yasui';
import { UserController, AuthController } from './controllers';
import { AuthMiddleware, LoggingMiddleware } from './middleware';
yasui.createServer({
controllers: [UserController, AuthController],
middlewares: [LoggingMiddleware, AuthMiddleware],
port: 3000,
debug: false,
environment: 'production',
enableDecoratorValidation: true,
injections: [
{ token: 'DATABASE_URL', provide: process.env.DATABASE_URL },
{ token: 'JWT_SECRET', provide: process.env.JWT_SECRET }
],
swagger: {
enabled: true,
path: '/api-docs',
info: {
title: 'Mi API',
version: '1.0.0',
description: 'API completa con todas las características'
}
}
});
Integración con Express
import yasui from 'yasui';
import express from 'express';
import cors from 'cors';
import helmet from 'helmet';
const app = yasui.createApp({
controllers: [UserController],
middlewares: [LoggingMiddleware]
});
// Agregar middleware de Express
app.use(cors());
app.use(helmet());
app.use(express.json({ limit: '10mb' }));
// Agregar rutas personalizadas
app.get('/health', (req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
// Middleware de manejo de errores
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: '¡Algo salió mal!' });
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Servidor ejecutándose en el puerto ${PORT}`);
});
Modo Debug
Habilita el modo debug para ver información detallada:
yasui.createServer({
controllers: [UserController],
debug: true
});
El modo debug proporciona:
- Registro de peticiones/respuestas
- Detalles de inyección de dependencias
- Información de registro de rutas
- Trazas de errores