From 831c0b4c5384ef340b430d16266fd46fccf13191 Mon Sep 17 00:00:00 2001 From: Sascha Schulz <sschulz@dh-software.de> Date: Mo, 13 Jan 2025 16:17:01 +0100 Subject: [PATCH] add chapter for server side rendering --- index.html | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 119 insertions(+), 0 deletions(-) diff --git a/index.html b/index.html index 710cff3..9bb7852 100644 --- a/index.html +++ b/index.html @@ -4484,6 +4484,125 @@ <li>Die gefundenen Primzahlen können ausgegeben werden, müssen aber nicht. In erster Linie geht es darum, die Arbeit auf mehrere Threads aufzuteilen.</li> </ul> </section> + <section> + <h3>Multi Page Applications</h3> + </section> + <section> + <p>Im Gegensatz zu einer SPA ("Single Page Application") teilt sich eine Multi Page Application in mehrere Unterseiten auf, die sich per URL z.B. im Browser adressieren lassen.</p> + </section> + <section> + <p>In einem neuen Ordner / Projekt:</p> + <pre> + <code class="bash" data-trim data-line-numbers> + npm init -y + + npm install express pug + + mkdir public + </code> + </pre> + <pre> + <code class="js" data-trim data-line-numbers> + // index.js (s. examples 010-nodejs/mpa.js) + const express = require("express"); + const app = express(); + + app.use(express.static("public")); + + app.listen(3002); + </code> + </pre> + </section> + <section> + <h3>Aufgabe</h3> + <p>Fülle das Verzeichnis "public" mit jeweis einer HTML-Datei für eine "Home"- und eine "About Us"-Seite, die beide eine einfache Navigations-Leiste enthalten (simple <code>span</code> mit Link (href)), um zwischen diesen beiden Seiten navigieren zu können. + Unterscheiden sollen sich diese beiden Seiten durch ihren "Inhalt", indem dort einfach "Home" und "About Us" enthalten ist.</p> + </section> + <section> + <h3>Serverseitiges Rendern</h3> + </section> + <section> + <p>Template-Engine "pug"</p> + <pre> + <code class="css" data-trim data-line-numbers> + html + head + body + div This is a div with some text + #main.my-class This is also a div with short-hands for id and class + a(href="/") This is a link with href + </code> + </pre> + </section> + <section> + <p>Conditionals</p> + <pre> + <code class="css" data-trim data-line-numbers> + html + head + body + if name + div Hello #{name}! + else + div Hello Anonymous" + </code> + </pre> + </section> + <section> + <p>Extension / Inheritance</p> + <pre> + <code class="css" data-trim data-line-numbers> + // layout.pug + html + head + body + div Some static content + block content + + // page.pug + extends layout.pug + + block content + div This is my home content + </code> + </pre> + </section> + <section> + <p>Pug in Express</p> + <pre> + <code class="bash" data-trim data-line-numbers> + mkdir views + </code> + </pre> + <pre> + <code class="js" data-trim data-line-numbers> + // ... + + app.set('view engine', 'pug'); + + app.get('/', (req, res) => { + // file name without .pug and some data passed to the template + res.render('index', { title: 'Hey', message: 'Hello there!' }) + }); + + app.listen(3002); + </code> + </pre> + <pre> + <code class="css" data-trim data-line-numbers> + // views/index.pug + html + head + title #{title} + body #{message} + </code> + </pre> + </section> + <section> + <h3>Aufgabe</h3> + <p>Implementiere die Seiten aus dem vorherigen Beispiel mit Pug (nutze Vererbung, um die Navigationsleiste nicht doppelt implementieren zu müssen) und + baue einen Gruß im Seitentext mit dynamischen Namen ein, den man z.B. in der URL als Query-Parameter "?name=Joe" angibt und der im Server ausgewertet wird.</p> + </section> </section> </div> </div> -- Gitblit v1.9.3