Inicio > Cursos > Node.js y Express > Routers y Arquitectura MVC
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.
← Middleware en ProfundidadAutenticación con JWT →

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