Modulaire Routing

Stel je dit scenario voor: Je hebt een winkel die huisdieren verkoopt, en een klant wil konijnen en katten bij je kopen.

Als u de basisroutingmethoden gebruikt die hierboven zijn gedefinieerd, ziet de code er als volgt uit:

Merk op dat we dezelfde routes meerdere keren hebben geschreven.

Hoewel het steeds opnieuw schrijven van de routes de redundantie en typefouten vergroot. Verder is het handig om onze code meer modulair te maken, want dat is een goede gewoonte.

Als programmeur wil je altijd dat je code er schoner uitziet. Om de bovenstaande code leesbaarder te maken, kunnen we twee methoden gebruiken.

Gebruik app.route

Dit is waar app.route in het spel komt. U schrijft het pad één keer, en u kunt meerdere route handlers aan elkaar rijgen.

U kunt app.route als volgt implementeren:

app.route(PATH)
.get(callback)
.post(callback)
//can add more HTTP requests (.put, .delete, etc)

We kunnen nu de code herschrijven :

De code ziet er schoner uit, en u hoefde de route voor elk HTTP-verzoek maar één keer in te voeren.

Er is echter nog een caveat: de parameter username bestaat in alle routes. Het steeds opnieuw typen van username moedigt nog steeds typefouten en redundanties aan. Wat als we het nog modulairder konden maken?

express.Router()

We kunnen express.Router() gebruiken om modulaire, monteerbare route handlers te maken. Een Router instance is een compleet middleware- en routingsysteem, daarom wordt het vaak een “mini-app” genoemd.”

We hoeven alleen het startpunt op te geven, en de Router instance doet de rest voor ons.

Om app.Router() te gebruiken, moeten we een aparte module maken, een instantie van app.Router instantiëren, en dan module.exports gebruiken om de instantie te exporteren.

Voor meer details over het gebruik van module.exports, zie mijn vorige artikel.

In dit voorbeeld behandelen we alleen een eenvoudig pad dat de username en id parameters zou bevatten.

In routerExample.js:

We gebruiken router.route(), die vergelijkbaar is met app.route. De gedefinieerde module zegt: “Zolang het pad zal eindigen met /:username/:id, voert u de volgende code uit zoals gedefinieerd.”

Om het te gebruiken, gebruik een andere module, main.js:

Zoals in het commentaar staat, gebruiken we app.use om routeExample.js te vertellen de functies uit te voeren die routes hebben die beginnen met de eerste parameter. De eerste parameter kan worden gezien als een startpunt. Daarom zal het pad starting point + PATH defined by router zijn.

Voorbeeld, volgens regel 6, zullen we nu GET en POST verzoeken afhandelen die beginnen met ‘/cats’. Ze zullen het pad cats/:username/:id krijgen.

Zoals altijd kunt u verschillende routes gebruiken in de routeExample module, maar het enige dat u hoeft op te geven is het startpunt in app.use.

Om de code uit te voeren, typt u node main in een terminal venster en gebruikt u cURL in een ander venster dienovereenkomstig.

Verschillende routes in express.Router met middleware

In dit voorbeeld navigeren we naar de homepage van onze dierenwinkel en definiëren we een middleware-functie, timeLog, die de tijd weergeeft waarop het betreffende pad is opgevraagd.

birds.js:

In main.js:

var birds = require('./birds')
app.use('/birds', birds) //handle /birds and /birds/about

Gebruik het node commando om de code uit te voeren, gebruik dan cURL zoals dit:

Output van client-zijvenster

Output van server-zijvenster

Dus, is het in express.Router mogelijk om middleware-functies alleen in specifieke paden uit te voeren.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *