Node.js + Express: Routen gegen Controller

98

Neu bei Node.js und Express, ich versuche zu verstehen, dass sich die beiden Konzepte, Routen und Controller, überschneiden.

Ich habe Beispiele gesehen, die einfach App.js + Routen / * ausführen. Dies scheint ausreichend zu sein, um verschiedene benötigte Anforderungen weiterzuleiten.

Ich sehe jedoch auch Leute, die über die Verwendung von Controllern sprechen, und einige, die ein formelleres MVC-Modell implizieren (???).

Wäre großartig, wenn mir jemand helfen könnte, dieses Rätsel zu lösen, und wenn Sie ein gutes Beispiel für die Einrichtung eines Controllers im Node.js + Express-Framework haben, wäre das großartig!

Vielen Dank,

user1462192
quelle

Antworten:

129

Eines der coolen Dinge an Express (und Node im Allgemeinen) ist, dass es nicht viele Meinungen über Sie aufwirft. Einer der Nachteile ist, dass es keine Meinungen über Sie drückt. Somit steht es Ihnen frei (und erforderlich!), Solche Meinungen (Muster) selbst zu erstellen.

Im Fall von Express können Sie definitiv ein MVC-Muster verwenden, und ein Routen-Handler kann sicherlich die Rolle eines Controllers übernehmen, wenn Sie dies wünschen - aber Sie müssen es auf diese Weise einrichten. Ein gutes Beispiel finden Sie im Express-Beispielordner mit dem Namen mvc. Wenn Sie sich das ansehen lib/boot.js, können Sie sehen, wie sie das Beispiel so eingerichtet haben, dass jede Datei im controllersVerzeichnis erforderlich ist , und die Express-Routen im laufenden Betrieb in Abhängigkeit vom Namen der auf den Controllern erstellten Methoden generieren.

Michelle Tilley
quelle
2
Der erste Absatz dieser ziemlich klugen Antwort gibt auch eine gute Erklärung / Unterscheidung zwischen den beiden Begriffen.
Frank Nocke
1

Sie können einfach einen Routenordner oder beides haben. Einige setzen beispielsweise Routen / Pfade (z. B. / user /: id) und verbinden sie mit Get, Post, Put / Update, Delete usw. und dann im Routenordner:

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

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

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

Dann im Controller-Ordner:

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

Nur um etwas zu machen. Ich habe Projekte ohne Controller-Ordner durchgeführt und die gesamte Logik an einem Ort platziert.

C. Johari
quelle