web-dev-qa-db-fra.com

Node.js + Express: Routes vs contrôleur

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

J'ai vu des exemples montrant que simple app.js + routes/* semble suffisant pour acheminer les différentes requêtes nécessaires.

Cependant, je vois aussi des gens parler d'utiliser des contrôleurs, et certains impliquant un modèle MVC plus formel (???).

Ce serait génial si quelqu'un pouvait m'aider à résoudre ce mystère et si vous aviez un bon exemple pour configurer un contrôleur dans le cadre Node.js + Express, ce serait génial!

Merci,

88
user1462192

Un des avantages de Express (et Node en général) est que cela ne pousse pas beaucoup d’opinions sur vous, mais l’un des inconvénients est qu’il ne pousse pas d’opinion sur vous. Ainsi, vous êtes libre (et nécessaire!) De définir vous-même de telles opinions (modèles).

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

120
Michelle Tilley

Vous pouvez simplement avoir un dossier de routes ou les deux. Par exemple, définissez certains itinéraires/chemins (ex./User /: id) et connectez-les à Obtenir, Publier, Mettre/Mettre à jour, Supprimer, etc., puis dans le dossier itinéraires:

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

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

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

Ensuite, dans le dossier 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.

0
C. Johari