Node.js + Express: Rutas vs controlador


98

Nuevo en Node.js y Express, estoy tratando de entender que los dos parecen conceptos superpuestos, rutas vs controlador.

He visto ejemplos que hacen simple app.js + rutas / *, esto parece ser suficiente para enrutar varias solicitudes necesarias.

Sin embargo, también veo personas que hablan sobre el uso de controladores, y algunos que implican un modelo MVC más formal (???).

Sería genial si alguien pudiera ayudarme a aclarar este misterio, y si tienes un buen ejemplo para configurar el controlador en Node.js + marco Express, ¡será genial!

Gracias,

Respuestas:


129

Una de las cosas interesantes de Express (y Node en general) es que no genera muchas opiniones sobre ti; una de las desventajas es que no empuja ninguna opinión sobre usted. Por lo tanto, usted es libre (¡y requerido!) De establecer tales opiniones (patrones) por su cuenta.

En el caso de Express, definitivamente puede usar un patrón MVC, y un controlador de ruta ciertamente puede desempeñar el papel de controlador si así lo desea, pero debe configurarlo de esa manera. Se puede encontrar un gran ejemplo en la carpeta de ejemplos Express , llamada mvc. Si observa lib/boot.js, puede ver cómo han configurado el ejemplo para requerir cada archivo en el controllersdirectorio y generar las rutas Express sobre la marcha según el nombre de los métodos creados en los controladores.


2
El primer párrafo de esta respuesta bastante inteligente también ofrece una buena explicación / distinción entre los dos términos.
Frank Nocke

1

Puede tener una carpeta de rutas o ambas. Por ejemplo, algunos establecen rutas / rutas (ej. / Usuario /: id) y las conectan a Obtener, Publicar, Poner / Actualizar, Eliminar, etc. y luego en la carpeta de rutas:

const subController = require('./../controllers/subController');

Router.use('/subs/:id);

Router
 .route('subs/:id');
 .get(
 subController.getSub
 .patch(
 subController.updateSub
 );

Luego, en la carpeta de controladores:

exports.getSub = (req, res, next) => {
  req.params.id = req.users.id;
};

Solo para hacer algo. Hice proyectos sin carpeta de controladores y coloqué toda la lógica en un solo lugar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.