Cómo estructurar rutas en Express con routers por recurso?
#1
Llevo unos meses trabajando en un proyecto personal con Node.js y Express, y me he encontrado con que mi archivo de rutas principal se ha vuelto un monstruo inmanejable. He intentado separar la lógica en controladores, pero el archivo de rutas en sí sigue teniendo cientos de líneas y es difícil de leer. He oído hablar de la idea de usar enrutadores separados para cada recurso, pero no estoy seguro de cuál es la mejor manera de estructurarlo sin sobrecomplicar las cosas. Me da la sensación de que debe haber una forma más limpia de organizar todo ese código, pero no quiero reinventar la rueda si ya hay convenciones establecidas para este tipo de problemas en aplicaciones medianas.
Responder
#2
Entiendo la sensación de atasco. La salida típica es separar por recurso y usar router: routes/auth.routes.js, routes/users.routes.js, etc. En Express, cada archivo exporta un router: const r = Router(); r.get('/login', login); module.exports = r; ¿y luego? en app.js: app.use('/api/usuarios', usersRouter); Así cada router gestiona sus propias rutas y ya no se te mezclan.
Responder
#3
La clave es la responsabilidad única: las rutas no deben contener lógica de negocio. Estructura en tres capas: router, controlador y servicio. El router solo mapea endpoints a controladores; los controladores llaman a servicios y devuelven respuestas. Cuando un recurso crece, el servicio puede dividirse, pero el router permanece estable. Y sí, los enrutadores siguen siendo el punto de entrada.
Responder
#4
Puede que el problema no sea la forma de enrutamiento sino la fijación de límites. Si ya tienes cientos de rutas, dividir en routers por recurso ayuda, pero también conviene un index que exporte todo. Si alguien te dice 'solo usa un router gigante', no te creas; el coste de lectura se mantiene si lo acompañas de una buena convención.
Responder
#5
Me gusta la idea de REST y contratos, usa router por recurso y añade documentación con OpenAPI. No reinventes la rueda, pero impón una ruta de lectura: carpeta routes con archivos como products.routes.js y un index que reexporta, y en app usar app.use('/api', apiRouter).
Responder
#6
Otra opción simple: un index en routes que fuse todos los routers y los exporta como apiRouter. Mantén nombres consistentes y prefijo '/api'.
Responder
#7
¿Has considerado usar NestJS o algún framework que gestione la modularidad por ti, si Express puro ya te duele?
Responder


[-]
Respuesta rápida
Mensaje
Escribe tu respuesta a este mensaje aquí.

Verificación de la imagen
Escribe el texto que aparece en la imagen, en el campo que está abajo. Este proceso se usa para evitar mensajes automáticos.
Verificación de la imagen
(no distingue MAYÚSC/minúsc)

Salto de foro: