GET Request
Wanneer een gebruiker naar het domein van onze website surft, stuurt zijn browser een GET
-request naar de route /
van onze applicatie.
Die kunnen we bijvoorbeeld zo afhandelen:
De gebruiker vraagt bijvoorbeeld naar localhost:3030
en krijgt zo de tekst "hallo" te zien.
Wat als we de gebruiker wat meer controle willen geven over de request?
GET requests
GET
-requests zijn de "default". Express-applicaties bevatten vaak calls van de vorm app.get
en deze dienen dus om aan te geven hoe een GET
-request moet worden afgehandeld. Met andere woorden: wat moet gebeuren wanneer de gebruiker naar een bepaalde pagina surft. Om meer data mee te geven kunnen we gebruik maken van query strings, bijvoorbeeld:
Dit is een GET
request naar Google. De domeinnaam is google.be
. Het pad is /search
. Alles achter ?
is de query string: q=ap&client=safari
De query string bepaalt de velden en waarden die we naar de server willen sturen. In dit geval sturen we q met de waarde "ap" (de zoekterm) en client met de waarde "safari" (de gebruike web browser).
Query
Om de waarden in een query string te raadplegen, maken we gebruik de property query
van het request object.
Het request object is de eerste parameter in de callback functie van app.get
. Dit object bevat informatie van de request die de gebruiker/browser stuurt.
Veronderstel dat we een array met namen hebben. We willen een naam opzoeken door een index mee te geven.
req
is het Request object. De property query
bevat alle query velden die meegestuurd worden.
Probeer zelf eens een lijst van query velden toe te voegen aan de URL en print de inhoud van req.query
naar de console.
Let op welke characters je gebruikt in een query string. Je kan bv. geen spaties gebruiken. Wil je in jouw client applicatie een random string meegeven als waarde, gebruik dan URI Encode om deze om te zetten in een geldige string!
Use case - Zoeken
Zoals al vermeld hebben gebruikt Google de query string om zoektermen mee te geven. We kunnen dit ook doen in onze eigen applicatie. Stel dat we een zoekfunctie willen maken die de gebruiker toelaat om een naam op te zoeken in een array van namen. We kunnen dit doen met een formulier in ons ejs bestand:
We gebruiken hier de query string q
om de zoekterm mee te geven. De gebruiker kan een zoekterm invullen in het input veld en op de knop drukken. De browser zal een GET
request sturen naar /search?q=zoekterm
. We kunnen dit request afhandelen in onze Express applicatie:
We gebruiken hier de filter
methode van een array om enkel de namen te tonen die beginnen met de zoekterm. We zetten de zoekterm en de gefilterde namen in een object en sturen dit naar de view.
Het is belangrijk om de zoekterm te normaliseren. We willen niet dat de zoekterm "Sven" niet gevonden wordt omdat de gebruiker "sven" heeft ingegeven. Daarom zetten we de zoekterm en de namen om naar kleine letters met de toLowerCase
methode. Let hier op dat we zoeken op de beginletters van de namen. Als je wil zoeken op een deel van de naam, kan je de includes
methode gebruiken.
Merk op dat we de q
variabele ook meegeven aan de view. Zo kunnen we de zoekterm tonen in het input veld en blijft deze behouden wanneer de pagina herladen wordt.
Use case - Sorteren
Sorteren is een andere use case waarbij we de query string kunnen gebruiken. De opzet is iets complexer dan de zoekfunctie, maar het principe blijft hetzelfde. We willen de gebruiker toelaten om de namen te sorteren op basis van een bepaald veld.
Het eerste wat we gaan doen is twee query parameters kiezen voor de sorteerfunctie: sortField
en sortDirection
. De gebruiker kan een veld kiezen om op te sorteren en een richting. We halen deze als volgt op:
We kijken hier of de query parameters bestaan. Als ze bestaan, gebruiken we de waarde. Als ze niet bestaan, gebruiken we een default waarde. We gebruiken de sort
methode van een array om de namen te sorteren. De richting van de sortering bepalen we door de return waarde van de sorteerfunctie om te keren. Als de richting "asc" is, sorteren we de namen in oplopende volgorde. Als de richting "desc" is, sorteren we de namen in aflopende volgorde.
We geven nu deze gesorteerde namen mee aan de view:
Dan kunnen we nu de gesorteerde namen tonen in de view. We voorzien ook al een formulier om de gebruiker toe te laten om de namen te sorteren:
Als we de sorteerrichting willen bijhouden in de view, kunnen we dit doen door de selected
property van de optie te gebruiken.
We moeten dan wel de sortField
en sortDirection
variabelen meegeven aan de view:
Bij veel velden kan het handig zijn om de opties voor de select elementen te genereren in de route. Dit kan je doen door een array van objecten te maken en deze door te geven aan de view:
en kan je deze doorgeven aan de view:
In onze ejs kunnen we dan de select elementen genereren:
Route Parameters
In plaats van query strings te gebruiken, kunnen we ook gestructureerde routes maken die parameters integreren in het pad zelf. Route parameters laten ons toe parameters te definiëren in onze route. Bijvoorbeeld:
Parameters van een route starten met :
. De gebruiker moet een waarde achter /person/
plaatsen om de route aan te spreken.
Door :index
bepaal je de naam van de property die de waarde van de parameter zal bevatten. Deze naam kan je dan gebruiken om de property terug te vinden in het object params
van het request object.
Je kan ook meerdere parameters meegeven:
Last updated