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ì:

Output della finestra lato client-lato finestra

Output della finestra lato server-finestra lato server

Quindi, è possibile in express.Router eseguire solo funzioni middleware in percorsi specifici.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *