Node.js + Express: rotte vs controller


98

Nuovo per Node.js ed Express, sto cercando di capire che i due sembrano concetti sovrapposti, rotte e controller.

Ho visto esempi che semplici fanno app.js + route / *, questo sembra essere sufficiente per instradare varie richieste necessarie.

Tuttavia, vedo anche persone che parlano dell'uso dei controller e alcuni implicano un modello MVC più formale (???).

Sarebbe fantastico se qualcuno potesse aiutarmi a chiarire questo mistero, e se hai un buon esempio per configurare il controller nel framework Node.js + Express, sarà fantastico!

Grazie,

Risposte:


129

Una delle cose interessanti di Express (e di Node in generale) è che non spinge molte opinioni su di te; uno degli svantaggi è che non spinge alcuna opinione su di te. Quindi, sei libero (e richiesto!) Di impostare tali opinioni (modelli) da solo.

Nel caso di Express, puoi sicuramente usare un pattern MVC e un gestore di rotte può certamente svolgere il ruolo di controller se lo desideri, ma devi impostarlo in questo modo. Un ottimo esempio può essere trovato nella cartella degli esempi di Express , chiamata mvc. Se guardi lib/boot.js, puoi vedere come hanno impostato l'esempio per richiedere ogni file nella controllersdirectory e generare le rotte Express al volo a seconda del nome dei metodi creati sui controller.


2
Il primo paragrafo di questa risposta piuttosto intelligente fornisce anche una buona spiegazione / distinzione tra i due termini.
Frank Nocke

1

Puoi semplicemente avere una cartella dei percorsi o entrambi. Ad esempio, alcuni impostano rotte / percorsi (es. / User /: id) e li collegano a Get, Post, Put / Update, Delete, ecc. E quindi nella cartella route:

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

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

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

Quindi, nella cartella controller:

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

Solo per fare qualcosa. Ho realizzato progetti senza cartelle di controller e ho inserito tutta la logica in un unico posto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.