EJS
Dankzij Express kunnen we nu dynamisch HTML terugsturen naar de client. Bekijk eventjes dit voorbeeld:
Bezoek http://localhost:3000
en merk op wat er gebeurt.
Bij elke refresh verandert de waarde van het random getal. Kijk naar de source code van deze pagina. Je ziet enkel een getal, geen scripts! Express stuurt een nieuwe inhoud van de pagina bij elke refresh! Laten we het voorbeeld even analyseren:
Deze lijn geeft een willekeurig getal terug. We gebruiken Math.random dat een random getal geeft tussen 0 en 1 en vermenigvuldigen dat met 100.
In plaats van een vaste string, geven we nu het randomgetal mee. Elke refresh voert de callback in app.get uit, dus elke refresh zorgt voor een ander getal.
Templates
Volledige web paginas in variabelen steken is niet ideaal. Wanneer je weet dat ook nog CSS en scripts erbij moeten, dan is het duidelijk dat we een andere oplossing nodig hebben. Express laat toe templates te gebruiken.
We kunnen bv een Hello World pagina maken:
Maar wat als we nu een willekeurige boodschap willen tonen?
Templates laten ons toe HTML paginas te schrijven zoals we dat gewoon zijn maar met variabele inhoud. Express ondersteunt verschillende template "engines". Hier gaan we gebruik maken van EJS.
Ejs installeren
Om EJS (Embedded JavaScript templating) te gebruiken installeren we de ejs module:
en we installeren ook de TypeScript types:
We stellen onze express app in om EJS als default view engine te gebruiken:
Net zoals we "port" de waarde 3000 geven, zetten we de property "view engine" op ejs.
Ejs render
EJS bestanden lijken op HTML files maar bevatten wat extras. Laten we starten met een simpel EJS bestand.
Dit bestand bewaren we als index.ejs in de folder /views. Merk op, dit is HTML in een EJS bestand, niets speciaals.
Alle EJS files moeten de extensie .ejs hebben.
Alle EJS files moeten in de views folder staan (die zich in de folder van jouw applicatie bevindt)
Nu passen we onze applicatie aan om de index.ejs te tonen (renderen: omzetten van EJS naar HTML):
Merk op hoe eenvoudig onze route naar / is geworden:
Ipv res.send
gebruiken we res.render
. Render verwacht als parameter de naam van een template die zich in de views folder bevindt. Hier tonen we de index file. Ga naar localhost:3000/ om jouw EJS file als HTML te zien.
Je kan nu verschillende EJS files toevoegen. Render ze via verschillende routes en kijk hoe je nu volledige control hebt over routes en de html die getoond wordt.
Dynamische Content
Templates helpen ons de HTML dynamisch te maken. Laten we ons voorbeeld aanpassen zodat we het willekeurig getal weer zien verschijnen. Eerst passen we onze TypeScript aan.
res.render()
heeft ook een tweede optionele parameter: een object waar elke property een variabel is die beschikbaar zal zijn in de EJS file.
In dit voorbeeld heeft de tweede parameter maar 1 property: aRandomNumber
. We geven dit de waarde van de variabele randomGetal
. aRandomNumber
zal dus bij elke refresh een willekeurig getal tussen 0 en 100 bevatten.
We kunnen ook meerdere properties meegeven:
Express zal nu index tonen, maar geeft eerst deze lijst van properties mee. Deze properties zijn nu beschikbaar als variabelen in de EJS file!
Laten we de index.ejs file aanpassen:
Wanneer je nu naar localhost:3000 gaat, zal je het random getal in de tekst zien staan.
Variabelen tonen
Om een variabele te tonen die werd meegegeven in de render functie, gebruiken we volgende notatie:
Het is perfect mogelijk om ook properties van een object te tonen:
Als je een array hebt, kan je ook een element tonen:
JavaScript in EJS
EJS laat ons toe JavaScript te gebruiken om meer controle te hebben over de dynamische inhoud van het template. Tussen <% %> kunnen we JavaScript plaatsen:
In EJS bestanden kan je geen TypeScript types gebruiken. Let hier zeker op dat je enkel aan de controller kant TypeScript kan gebruiken.
If statements
Een if statement kan ook toegevoegd worden:
Let hier op dat de if statement en het afsluiten van het }
teken tussen <% %>
moet staan.
Loops
Er bestaat ook een mogelijkheid om een loop toe te voegen. We hebben al gezien dat we <% %> gebruiken om JavaScript uit te voeren. Stel je voor dat 10 keer "Hallo" getoond moet worden. We kunnen dit doen met een for loop:
Het is belangrijk om te weten dat alle javascript code tussen <% %>
moet staan en dus ook de for statement en het afsluiten van het }
teken.
Wil je de waarde van i
tonen, dan moet je <%= i %>
gebruiken.
Voorbeeld lijst
Laten we een voorbeeld bekijken waar we een lijst van mensen tonen. We hebben een array van mensen en we willen de naam van elke persoon tonen.
In de index.ejs file tonen we nu de lijst van mensen:
Voorbeeld tabel
Laten we een voorbeeld bekijken waar we een tabel tonen. We hebben een array van mensen. Deze keer worden deze mensen voorgesteld als objecten. We willen de naam, stad en leeftijd van elke persoon tonen.
In de index.ejs file tonen we nu de tabel van mensen:
Het is ook mogelijk om een if statement toe te voegen. Stel dat we enkel personen willen tonen die ouder zijn dan 30:
Include files
Je kan ook andere EJS files includen in een EJS file. Dit is handig wanneer je bv een header en footer hebt die je in elke pagina wil tonen. Stel je voor dat we de volgende pagina hebben:
In principe wil je op elke pagina dezelfde header en footer tonen. We kunnen de header en footer in aparte EJS files steken en deze includen in de index.ejs file. Deze EJS files bewaren we meestal in een directory genaamd partials in de view directory.
We maken dus een header.ejs file:
En een footer.ejs file:
nu kunnen we in elke EJS file de header en footer includen:
Alle variabelen die doorgegeven worden met de render functie zijn ook beschikbaar in de included files.
Last updated