Node.js y ExpressExpress.jsLección 8 de 20
Routers y Arquitectura MVC
Express.Router permite separar las rutas en archivos independientes. La arquitectura MVC (Model-View-Controller) organiza el código en capas: routes (qué URL), controllers (lógica HTTP), services (lógica de negocio). Esta separación hace el código mantenible y testeable.
// src/routes/usuarios.routes.js
const { Router } = require('express');
const usuariosController = require('../controllers/usuarios.controller');
const { verificarToken } = require('../middlewares/auth.middleware');
const router = Router();
// Rutas públicas
router.post('/registro', usuariosController.registro);
router.post('/login', usuariosController.login);
// Rutas protegidas
router.get('/', verificarToken, usuariosController.listar);
router.get('/:id', verificarToken, usuariosController.obtener);
router.put('/:id', verificarToken, usuariosController.actualizar);
router.delete('/:id', verificarToken, usuariosController.eliminar);
module.exports = router;
// -------------------------------------------
// src/controllers/usuarios.controller.js
const usuariosService = require('../services/usuarios.service');
const listar = async (req, res, next) => {
try {
const usuarios = await usuariosService.obtenerTodos(req.query);
res.json({ data: usuarios });
} catch (err) {
next(err); // pasar al middleware de errores
}
};
const obtener = async (req, res, next) => {
try {
const usuario = await usuariosService.obtenerPorId(req.params.id);
if (!usuario) return res.status(404).json({ error: 'No encontrado' });
res.json(usuario);
} catch (err) {
next(err);
}
};
module.exports = { listar, obtener /*, registro, login, actualizar, eliminar */ };
// -------------------------------------------
// src/app.js — punto de entrada
const express = require('express');
const usuariosRouter = require('./routes/usuarios.routes');
const app = express();
app.use(express.json());
// Montar routers con prefijo
app.use('/api/v1/usuarios', usuariosRouter);
module.exports = app;
ConsejoLa regla de oro: los controllers solo manejan HTTP (req/res). Toda la lógica de negocio va en services. Así puedes testear los services sin necesidad de hacer peticiones HTTP.
Practica esta lección
Resuelve los ejercicios del curso de Node.js y Express en la app, gratis y con corrección automática.
Empezar a practicar