Routing modulare
Immagina questo scenario: Avete un negozio che vende animali domestici, e un cliente vuole comprare conigli e gatti da voi.
Se usate i metodi di routing di base definiti sopra, il codice sarà simile a questo:
Notare che abbiamo scritto le stesse rotte più volte. Inoltre, è utile rendere il nostro codice più modulare, come è buona pratica.
Come programmatore, vuoi sempre rendere il tuo codice più pulito. Per rendere il codice di cui sopra più facile da leggere, possiamo usare due metodi.
Usare app.route
Ecco dove entra in gioco app.route
. Scriverete il percorso una volta sola, e potrete concatenare più gestori di rotte.
Puoi implementare app.route
come segue:
app.route(PATH)
.get(callback)
.post(callback)
//can add more HTTP requests (.put, .delete, etc)
Ora possiamo riscrivere il codice:
Il codice sembra più pulito, e si è dovuto inserire il percorso per ogni richiesta HTTP solo una volta.
Tuttavia, c’è un altro avvertimento: il parametro username
esiste in tutte le rotte. Digitare username
ancora e ancora incoraggia errori di battitura e ridondanze. E se potessimo renderlo ancora più modulare?
express.Router()
Possiamo usare express.Router()
per creare gestori di rotte modulari e montabili. Un’istanza Router
è un middleware completo e un sistema di routing, ed è per questo che viene spesso definita una “mini-app.”
Abbiamo solo bisogno di specificare il punto di partenza, e l’istanza Router
gestirà il resto per noi.
Per usare app.Router()
, dobbiamo creare un modulo separato, istanziare un’istanza di app.Router
, e poi usare module.exports
per esportare l’istanza.
Per maggiori dettagli sull’uso di module.exports
, vedi il mio articolo precedente.
In questo esempio, ci limiteremo a gestire un semplice percorso che conterrebbe i parametri username
e id
.
In routerExample.js
:
Usiamo router.route()
, che è simile a app.route
. Il modulo definito dice: “Finché il percorso finirà con /:username/:id
, eseguite il seguente codice come definito.”
Per utilizzarlo, usate un altro modulo, main.js
:
Come dicono i commenti, usiamo app.use
per dire a routeExample.js
di eseguire le funzioni che hanno percorsi che iniziano con il primo parametro. Il primo parametro può essere definito come un punto di partenza. Pertanto, il percorso sarà starting point + PATH defined by router
.
Per esempio, secondo la linea 6, ora gestiremo le richieste GET e POST che iniziano con ‘/cats’
. Avranno il percorso cats/:username/:id
.
Come sempre, potete usare diversi percorsi nel modulo routeExample
, ma l’unica cosa che dovete specificare è il punto di partenza in app.use
.
Per eseguire il codice, digitate node main
in una finestra del terminale e usate cURL
in un’altra finestra di conseguenza.
Diversi percorsi in express.Router con middleware
In questo esempio, navigheremo verso la homepage Birds del nostro negozio di animali e definiremo una funzione middleware, timeLog
, che mostrerà l’ora in cui il rispettivo percorso è stato richiesto.
birds.js
:
In main.js
:
var birds = require('./birds')
app.use('/birds', birds) //handle /birds and /birds/about
Utilizzare il comando node
per eseguire il codice, quindi utilizzare cURL
così:
Quindi, è possibile in express.Router
eseguire solo funzioni middleware in percorsi specifici.