Node - grunderna för routing i Express
I förra aktiviteten gick vi igenom koden i app.js
-filen. Den är en grund som vi inte behöver ändra så mycket i. Det finns visserligen vissa saker som man antagligen vill förbättra där men det mesta kan vara som det är. Huvudjobbet för en Express-applikation sker i de funktioner som hanterar så kallad "routing". Med routing anger vi att vissa sökväg på vår webbtjänst ska trigga igång specifika koddelar. I dessa koddelar skapar vi vår app. För att använda vår webbtjänst kommer alltså vissa URL:er att anropas, beroende på URL:ens sökvägar kommer olika saker att hända. Om du provat på något REST-API förstår du att detta är en dylik teknik som används för dessa.
I mångt och mycket påminner route:ar om hur vi kopplar oss till händelser. Liksom i det fallet så säger vi att en viss bit kod ska köras när något inträffar. I detta fall är det som inträffar att någon försöker komma åt en specifik del av vår sajt. Då triggas vår kod igång och vi kan svara på anropet. Vi kan få in olika typer av parametrar som styr hur vi ska behandla anropet. Vi kan svara i stort sett med vilken data som helst. Det är inget i begreppet som stipulerar att det måste vara något specifikt format som vi svarar med. Det kan vara ren HTML, JSON, XML, osv. Vi kanske till och med bara svarar med en HTTP-svarskod.
index.js
Vi ska titta på hur man skapar olika "route":ar. Vi börjar att titta på den som finns med i vår Express-applikation. Titta i katalogen "routes
", här finns två filer; index.js
och users.js
. Detta är koden för de två router som vår exempelapplikation erbjuder. Vi tar och tittar på dem...
index.js
I index.js
finner du följande kod:
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
I denna fil skapas en mycket basal routning som bara svarar med en enkel sida. Vad gör då koden?
På rad 1 ser vi till att paketet med Express är installerat, så att vi vet att vi kan använda metoder ifrån detta. Därefter begär vi en referens till Router
-objektet i Express. Denna kommer vi att använda för att koppla oss till Express.
Att välja kommunikationsmetod
Rad 5 är den intressanta raden i denna kod. Här kopplar vi in vår route i Express. Först måste vi ange vilken typ av HTTP-anrop vi kan hantera, t.ex. GET eller POST. I vårt fall kan vi hantera GET
-förfrågningar. Med GET
-anrop så skickar man med eventuella parametrar direkt i URL:en. Vi talar om för Express att vi kan hantera denna typ av förfrågningar genom att köra metoden get
. Hade vi hanterat POST
, hade vi helt enkelt kört metoden post
. Enkelt och logiskt!
Koppling till URL
Den första inparametern till get
är en sträng som anger till vilken URL som vår hanterare ska kopplas. Detta påminner om hur vi valde ut vilka händelser som skulle trigga en funktion når vi jobbade med händelser i jQuery. Lägg märke till att vi bara anger sökvägs-delen av URL:en, inte hela URL:en med protokoll, server, osv. Den biten sköter redan Express om åt oss.
Hanterare
Som nästa inparameter tar get
den funktion som ska hantera denna typ av förfrågan. Detta är den viktigaste biten i vårt anrop, då detta är denna funktion som kommer att generera den data som ska skickas tillbaka till den webbklient som anropade vår service. När den körs får man med följande inparametrar ifrån Express:
- Request - det vill säga information om den förfrågan som skickats till oss. Denna innehåller blanda annat eventuella parametrar som skickats med förfrågan.
- Response - ett objekt som möjliggör att vi kan skicka tillbaka information till frågeställaren.
- Next - Denna behövs inte alltid användas. Om den är med och satt till något, så är detta en till hanterare som kan hantera den typen av föfrågningar som vi håller på att behandla. Om vi ser att vår nuvarande hanterare inte klarar av anropet, kan vi skicka förfrågan vidare till nästa hanterare. Detta är lite överkurs!
Vår hanterare
I exemplet körs en anonym funktion som hanterare. Om du ska skriva några längre hanterare, som är mer än ett par rader kod, bör du överväga att lägga den i en namngiven funktion. Det är ofta mer överskådligt och lättare att underhålla/debugga.
Koden i hanteraren gör inte så jättemycket. Den använder sig av en mallmotor, Jade i detta fall, för att skapa en minimal webbsida. Vi går inte in på djupet hur detta fungerar. Istället tar vi och skriver en egen hanterare. Det gör vi i nästa aktivitet