We gaan een combinatie oefening maken van drie voorgaande oefeningen: Math Service, News Paper Search en Contact Form.
Je mag zelf kiezen van welk project je als begin wilt gebruiken, je mag ook helemaal opnieuw beginnen en een nieuw project maken.
Maak 3 verschillende routers aan, die elk een van de bovenstaande oefeningen uitvoeren. De routers moeten de volgende paden hebben:
/math
/newspaper
/contact
Je mag zelf kiezen welke naam je de bestanden geeft, maar zorg ervoor dat je de bestanden in een aparte map zet, bijvoorbeeld routers
.
De werking van de applicatie moet hetzelfde blijven als de oefeningen die je hebt gekozen, maar dan verdeeld over drie routers.
Zorg dat de /
route van je applicatie een overzicht geeft van de drie verschillende routes die je hebt gemaakt.
Maak een nieuw project aan met de naam utility-middleware
en installeer de express
en de ejs
module.
Schrijf een middleware die een aantal handige functies bevat. De middleware moet de volgende functies bevatten:
caesar
: een functie die een string en een shift meekrijgt en de string versleuteld met de Caesar cipher. De shift is een getal dat aangeeft hoeveel plaatsen de letters in het alfabet verschoven moeten worden. Bijvoorbeeld: caesar('abc', 1)
geeft 'bcd'
.
reverse
: een functie die een string meekrijgt en de string omdraait. Bijvoorbeeld: reverse('abc')
geeft 'cba'
.
shorten
: een functie die een string en een lengte meekrijgt en de string inkort tot de lengte. Als de string langer is dan de lengte, moet er een ...
achter de string geplaatst worden. Bijvoorbeeld: shorten('abcde', 3)
geeft 'abc...'
.
Zorg dat deze middleware beschikbaar is voor alle routes van de applicatie en test de functies uit in je ejs bestanden.
Maak een nieuw project aan met de naam rate-limiter-middleware
en installeer de express
en de ejs
module.
Maak een nieuwe middleware aan die een rate limiter implementeert. Een rate limiter zorgt ervoor dat een bepaalde route maar om de zoveel tijd aangeroepen kan worden. In eerste instantie willen we dat een route maar 1 keer per seconde aangeroepen kan worden. Als dit gebeurd is, moet de gebruiker een foutmelding krijgen (bijvoorbeeld een 429 status code). Je mag gebruik maken van 1 globale variabele om de tijd bij te houden wanneer de route voor het laatst is aangeroepen.
Maak een nieuwe route aan op /
van de applicatie die een GET
request afhandelt. De route rendert een simpele Hello World pagina.
Gebruik de rate limiter middleware om ervoor te zorgen dat de route maar 1 keer per seconde aangeroepen kan worden.
Breid de rate limiter middleware uit zodat je de tijd tussen de requests kan instellen. Dit kan je bijvoorbeeld doen door een parameter mee te geven aan de middleware. Als de parameter niet wordt meegegeven, moet de standaard tijd 1 seconde zijn.
Je kan bijvoorbeeld de volgende error meegeven aan de gebruiker:
Breid de rate limiter middleware uit zodat deze ook rekening houdt met de IP van de gebruiker. Dit kan je bijvoorbeeld doen door een object bij te houden waarin je de tijd bijhoudt wanneer de route voor het laatst is aangeroepen per IP.