Differenze tra express.Router e app.get?

Sto iniziando con NodeJS e Express 4 , e sono un po ‘confuso. Ho letto il sito web express , ma non riesco a vedere _quando utilizzare un gestore di percorsi o quando utilizzare express.Router .

Come ho potuto vedere, se voglio mostrare una pagina o qualcosa quando l’utente preme /show per esempio dovrei usare:

 var express = require('express') var app = express() app.get("/show", someFunction) 

All’inizio pensavo che fosse vecchio, per express3 , è giusto o anche per express4 ?

Se questo è il modo di farlo in express4 , a cosa serve express.Router ?

Leggo quasi lo stesso esempio di sopra ma usando express.Router :

 var express = require('express'); var router = express.Router(); router.get("/show", someFunction) 

Quindi, qual è la differenza tra entrambi gli esempi?

Quale dovrei usare se voglio solo fare un semplice sito di test?

app.js

 var express = require('express'), dogs = require('./routes/dogs'), cats = require('./routes/cats'), birds = require('./routes/birds'); var app = express(); app.use('/dogs', dogs); app.use('/cats', cats); app.use('/birds', birds); app.listen(3000); 

dogs.js

 var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.send('GET handler for /dogs route.'); }); router.post('/', function(req, res) { res.send('POST handler for /dogs route.'); }); module.exports = router; 

Quando viene chiamata var app = express() , viene restituito un object app. Pensa a questo come all’app principale .

Quando viene chiamato var router = express.Router() , viene restituita una mini app leggermente diversa. L’idea alla base della mini app è che ogni percorso nella tua app può diventare piuttosto complicato e trarrai vantaggio dallo spostamento di tutto quel codice in un file separato. Il router di ogni file diventa una mini app , che ha una struttura molto simile all’app principale .

Nell’esempio sopra, il codice per la rotta / dogs è stato spostato nel proprio file in modo da non ingombrare l’ app principale . Il codice per / gatti e / uccelli sarebbe strutturato in modo simile nei propri file. Separando questo codice in tre mini app , puoi lavorare sulla logica di ognuno in isolamento e non preoccuparti di come influenzerà gli altri due.

Se si dispone di codice (middleware) relativo a tutti e tre i percorsi, è ansible inserirlo nell’app principale , prima delle app.use(...) . Se hai codice (middleware) che riguarda solo uno di questi percorsi, puoi inserirlo nel file solo per quella rotta.

Express 4.0 viene fornito con il nuovo router. Come menzionato sul sito:

La class express.Router può essere utilizzata per creare gestori di percorsi modulari montabili. Un’istanza del router è un middleware e un sistema di routing completi; per questo motivo viene spesso definito “mini-app”.

C’è un buon articolo su https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 che descrive le differenze e cosa può essere fatto con i router.

Riassumere

Con i router è ansible modularizzare il codice più facilmente. Puoi usare i router come:

  1. Percorsi di base: Home, About
  2. Instradare il middleware per registrare le richieste sulla console
  3. Percorso con parametri
  4. Instradare Middleware per i parametri per convalidare parametri specifici
  5. Convalida un parametro passato a una determinata rotta

Nota:

L’object app.router , che è stato rimosso in Express 4, ha fatto un ritorno in Express 5. Nella nuova versione, è solo un riferimento al router Express di base, a differenza di Express 3, in cui un’app ha dovuto caricare esplicitamente esso.

 app.route('/book') .get(function (req, res) { res.send('Get a random book') }) .post(function (req, res) { res.send('Post a random book') }) 

Come nell’esempio precedente, possiamo aggiungere un metodo di richiesta HTTP diverso sotto una rotta.

utilizzare app.js per scrivere percorsi significa che sono accessibili a tutti gli utenti poiché app.js viene caricato all’avvio dell’applicazione. Tuttavia, la collocazione dei percorsi nelle mini app express.router () protegge e limita la loro accessibilità.

In una parola, express.Router può fare più cose quando si confronta con app.get() , come middleware, inoltre, è ansible definire un altro object router con express.Router()

Supponiamo che la tua applicazione sia poco complessa. Quindi, per prima cosa, dividiamo l’applicazione in più moduli in modo che le modifiche in un modulo non ingombrino le altre e tu possa continuare a lavorare sui singoli moduli, ma alla fine della giornata devi integrare tutto in uno dato che tu stanno costruendo una singola applicazione. È come se avessimo un’applicazione principale e poche applicazioni figlio il cui genitore è l’applicazione principale. Quindi quando creiamo l’applicazione genitore ne creiamo una usando

 var express = require('express'); var parent = express(); 

E a questa applicazione genitore dobbiamo portare le applicazioni figlio. Ma dal momento che le applicazioni secondarie non sono applicazioni completamente diverse (poiché vengono eseguite nello stesso contesto, java term), express fornisce il modo di farlo tramite la funzione Router di Expresse e questo è ciò che facciamo nel file di ogni modulo figlio e consente di chiamare uno di questi moduli figlio come aboutme .

 var express = require('express'); var router = express.Router(); /** ** do something here **/ module.exports = router; 

Tramite module.exports stiamo rendendo questo modulo disponibile ad altri da consumare e poiché abbiamo elementi modularizzati, dobbiamo rendere i file del modulo disponibili all’applicazione padre tramite la funzione require del nodo come qualsiasi altro modulo di terze parti e il file principale sembra qualcosa come questo.

 var express = require('express') var parent = express() var child = require(./aboutme) 

dopo aver reso disponibile al genitore questo modulo figlio, è necessario comunicare all’applicazione padre quando utilizzare questa applicazione figlia. Diciamo che quando un utente raggiunge il percorso aboutme abbiamo bisogno dell’applicazione client su di me per gestire la richiesta e lo facciamo usando il metodo di utilizzo di Expresse.

 parent.use('/aboutme', aboutme); 

e in un colpo il file genitore ha questo aspetto

 var express = require('express'); var parent = express(); var child = require(./aboutme); /*** **do some stuff here **/ parent.use('/aboutme',aboutme); 

Soprattutto ciò che il genitore può fare è che può avviare un server dove non può farlo il bambino. Spero che questo chiarisca. Per ulteriori informazioni puoi sempre guardare il codice sorgente che richiede un po ‘di tempo ma ti dà molte informazioni. Grazie.

express.Router ha molte opzioni:

  • Abilita maiuscole / minuscole /show percorso non uguale /Show , ma l’impostazione predefinita è diata
  • modalità di routing rigorosa. che /show/ not lo stesso /show e anche disabilitato di default
  • È ansible aggiungere middleware specifico per percorsi specifici.