S42-Core Controller Clase
- Documentación de Controller
Documentación de Controller
La clase Controller
es parte del paquete s42-core
y proporciona una manera intuitiva y flexible de definir endpoints para solicitudes HTTP. Admite enrutamiento dinámico, cadenas de middlewares y múltiples métodos HTTP para cada ruta.
Esta clase está diseñada para trabajar perfectamente con la clase RouteControllers
para gestionar rutas de aplicación de manera eficiente.
Propósito
La clase Controller
:
- Simplifica la definición de endpoints HTTP.
- Admite middlewares para procesar solicitudes.
- Maneja múltiples métodos HTTP para un solo endpoint.
- Permite rutas con parámetros dinámicos.
Instalación
Instala el paquete s42-core
:
npm install s42-core
Uso
Ejemplo Básico
import { Controller } from 's42-core';
const helloController = new Controller('GET', '/hello', async (req, res) => { return res.json({ message: 'Hola, Mundo!' });});
Agregar Middlewares
Puedes encadenar múltiples middlewares para preprocesar la solicitud. Los middlewares se ejecutan en orden y pueden devolver opcionalmente un Response
. Si un middleware devuelve undefined
, se ejecuta el siguiente middleware en la cadena.
helloController.use(async (req, res) => { req.timestamp = Date.now(); // Agregar datos personalizados a la solicitud});
helloController.use(async (req, res) => { console.info(`Solicitud recibida en: ${req.timestamp}`);});
Manejar Múltiples Métodos
Puedes agregar múltiples métodos HTTP para un solo controlador.
helloController.post();helloController.delete();
Esto permite que la misma ruta /hello
maneje solicitudes GET
, POST
y DELETE
.
Parámetros Dinámicos
Define rutas dinámicas con parámetros:
const userController = new Controller('GET', '/users/:userId', async (req, res) => { return res.json({ userId: req.params.userId });});
El objeto req.params
contiene los parámetros dinámicos analizados desde la URL.
Métodos Clave
Constructor
constructor(method: TYPE_HTTP_METHOD, path: string, callback: Middleware);
method
: El método HTTP para la ruta (por ejemplo,GET
,POST
).path
: La ruta (por ejemplo,/users/:userId
).callback
: El middleware principal para manejar la solicitud.
getPath(): string
Devuelve la ruta asociada con el controlador.
getMethods(): TYPE_HTTP_METHOD[]
Devuelve un array de los métodos HTTP admitidos por el controlador.
use(callback: Middleware): this
Agrega un middleware al controlador. Los middlewares se ejecutan en el orden en que se agregan.
Métodos HTTP
Estos métodos permiten agregar métodos HTTP al controlador:
get()
: Agrega el métodoGET
.post()
: Agrega el métodoPOST
.delete()
: Agrega el métodoDELETE
.put()
: Agrega el métodoPUT
.patch()
: Agrega el métodoPATCH
.options()
: Agrega el métodoOPTIONS
.update()
: Agrega el métodoUPDATE
.
getCallback(): (req: Request, res: Res) => Promise<Response>
Devuelve una función callback que maneja la solicitud entrante. La función ejecuta la cadena de middlewares y devuelve un Response
.
Ejemplo de Integración con RouteControllers
La clase Controller
está diseñada para trabajar con RouteControllers
. Aquí tienes un ejemplo:
import { Controller, RouteControllers, Server } from 's42-core';
const helloController = new Controller('GET', '/hello', async (req, res) => { return res.json({ message: 'Hola, Mundo!' });});
const userController = new Controller('GET', '/users/:userId', async (req, res) => { return res.json({ userId: req.params.userId });});
const routeControllers = new RouteControllers([ helloController, userController,]);
const server = new Server();await server.start({ port: 3000, RouteControllers: routeControllers,});
console.info('El servidor está corriendo en:', server.getURL());
Características
- Enrutamiento Dinámico: Admite rutas estáticas, dinámicas y con comodines.
- Soporte para Middlewares: Permite el procesamiento en capas de las solicitudes.
- Métodos Flexibles: Maneja múltiples métodos HTTP para una sola ruta.
- Listo para Integración: Diseñado para trabajar con
RouteControllers
para un enrutamiento eficiente.
Ventajas
- Modular: Permite definir endpoints como módulos independientes.
- Encadenable: Agrega métodos y middlewares de manera fluida.
- Manejo de Errores: Incluye manejo robusto de errores en las cadenas de middlewares.
- Parámetros Dinámicos: Admite rutas parametrizadas para un enrutamiento flexible.
Licencia
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.