Node.js + Express: routes vs contrôleur


98

Nouveau sur Node.js et Express, j'essaie de comprendre les deux concepts qui semblent se chevaucher, routes vs contrôleur.

J'ai vu des exemples simples qui font app.js + routes / *, cela semble être suffisant pour acheminer les diverses requêtes nécessaires.

Cependant, je vois aussi des gens parler de l'utilisation de contrôleurs, et certains qui impliquent un modèle MVC plus formel (???).

Ce serait génial si quelqu'un peut m'aider à éclaircir ce mystère, et si vous avez un bon exemple pour configurer le contrôleur dans le framework Node.js + Express, ce sera génial!

Merci,

Réponses:


129

Une des choses intéressantes à propos d'Express (et de Node en général) est qu'il ne pousse pas beaucoup d'opinions sur vous; l'un des inconvénients est qu'il ne pousse aucune opinion sur vous. Ainsi, vous êtes libre (et obligé!) De créer vous-même de telles opinions (modèles).

Dans le cas d'Express, vous pouvez certainement utiliser un modèle MVC, et un gestionnaire de route peut certainement jouer le rôle de contrôleur si vous le souhaitez - mais vous devez le configurer de cette façon. Un bon exemple peut être trouvé dans le dossier d'exemples Express , appelé mvc. Si vous regardez lib/boot.js, vous pouvez voir comment ils ont configuré l'exemple pour exiger chaque fichier dans le controllersrépertoire et générer les routes Express à la volée en fonction du nom des méthodes créées sur les contrôleurs.


2
Le premier paragraphe de cette réponse assez intelligente donne également une bonne explication / distinction entre les deux termes.
Frank Nocke

1

Vous pouvez simplement avoir un dossier de routes ou les deux. Par exemple, certains définissent des routes / chemins (ex. / User /: id) et les connectent à Get, Post, Put / Update, Delete, etc. puis dans le dossier routes:

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

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

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

Ensuite, dans le dossier des contrôleurs:

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

Juste pour faire quelque chose. J'ai réalisé des projets sans dossier de contrôleurs et placé toute la logique au même endroit.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.