Lektion 13 — Øvelser
Man lærer routes bedst ved at omskrive serveren og kalde den uden browseren. Detaljerne, der ikke står på slidesne, står her.
Hvis du ikke nåede forberedelsen, så læs Express-lectures
og kør my-app, før du rører gruppens server.js.
| Øvelse | Hvornår | Tid |
|---|---|---|
1 Fra http.createServer til Express |
Efter gennemgangen af Express i server.js |
~35 min |
2 Én patient via :cpr |
Efter quizzen om routes og :cpr |
~15 min |
3 POST fra api.http |
Efter quizzen om POST | ~30 min |
| 4 Tabellen mod jeres server | Efter øvelse 3 | ~25 min |
Øvelse 1 — Fra http.createServer til Express
Mål: server.js kører med Express. GET /api/patients og 404 opfører sig
som i lektion 11, og tabellen henter stadig JSON fra localhost:3000.
Arbejd i gruppens projekt. Behold filnavnet server.js.
Det skal du lave
npm init -yognpm install expressi projektmappen. Opret en.gitignoremed linjennode_modules/, hvis I ikke har en.- Erstat
http.createServermed Express som på slidesne:require,app.usetil CORS,express.json(),patients-array. app.get("/api/patients", …)svarer medres.json(patients).- Sidste middleware, under alle routes:
404og{ error: "not found" }. app.listen(3000). Start mednode server.js.- Tjek
http://localhost:3000/api/patients, og at/giver 404 JSON. - Bekræft at tabellen viser de samme navne som før omskrivningen.
Udgangspunkt
server.js fra lektion 11 — mindst to patienter med cpr og navn.
Tjekliste
-
http.createServerogwriteHeader væk fraserver.js -
package.jsonogpackage-lock.jsonfindes;node_modules/er ikke committet -
GET /api/patientsgiver 200 med listen -
GET /og andre ukendte stier giver 404 JSON - CORS-headeren er sat, så
fetchfra en lokal HTML-side virker - Tabellen og browser-JSON viser samme data
Øvelsen er i hus når…
du kan stoppe processen, starte igen og vise JSON plus tabelrækker uden
at ændre fetch-URL'en.
Hvis du sidder fast
Cannot find module 'express': kørnpm install expressi mappen, hvorserver.jsligger.require is not defined in ES module scope: jerespackage.jsonhar"type": "module"(fx fra Vite). Kørnpm init -yi mappen medserver.js, så den får sin egenpackage.json.EADDRINUSE: address already in use :::3000: en anden proces kører stadig — fxmy-appeller jeres gamle server. Find terminalen og tryk Ctrl+C.- 404 på
/api/patients: kører den gamle proces stadig? Stop den med Ctrl+C og startnode server.jsigen. Tjek også stavningen af stien, og at 404-handleren står under routen. - Tom tabel, JSON OK: CORS eller forkert
fetch-URL.
Hvis du har ekstra tid
Tilføj en tredje patient i arrayet i filen. Genstart og tjek tabellen.
Skriv ikke POST endnu — det er øvelse 3.
Øvelse 2 — Én patient via :cpr
Mål: GET /api/patients/:cpr henter én patient fra samme array. En ukendt
CPR giver 404.
Det skal du lave
- Tilføj
app.get("/api/patients/:cpr", …)som på slidesne, over 404-handleren. - Genstart
node server.js. - Åbn
http://localhost:3000/api/patients/plus en CPR fra jeres liste. - Prøv en CPR, der ikke står i listen.
Tjekliste
- En kendt CPR giver 200 og den ene patient — ikke en liste
- Ukendt CPR giver 404 JSON, ikke en tom liste
-
GET /api/patientsvirker stadig som før
Øvelsen er i hus når…
du kan vise begge svar i browseren og pege på req.params.cpr i koden.
Hvis du sidder fast
- 404 på en CPR, du ved er i listen:
:cpr-routen står under catch-all. Flyt den op. Eller CPR står som tal i arrayet — den skal stå som tekst ("2512489996"), fordireq.params.cpraltid er en streng. - Du får hele listen: du kalder
res.json(patients)i stedet forres.json(patient).
Hvis du har ekstra tid
Åbn DevTools → Network, hent en kendt og en ukendt CPR, og find statuskoden for hver.
Øvelse 3 — POST fra api.http
Mål: POST /api/patients tilføjer en patient til listen i hukommelsen. Du
kan bevise det fra en .http-fil i VS Code uden at åbne DevTools.
Serveren skal køre, mens du sender requests.
Det skal du lave
- Installér extension REST Client (Huachao Mao) i VS Code under Extensions.
- Tilføj
app.post("/api/patients", …)over 404-handleren. - Læs
cprognavnfrareq.body ?? {}. Svar400, hvis et felt mangler. pushtilpatients. Svar201og den nye patient som JSON.- Genstart
node server.js. - Lav
api.httpi projektmappen med de tre requests nedenfor. - Klik Send Request over
POST-requestet med body. Tjek, at svaret er201. - Send
GETog find den nye patient. Åbn samme URL i browseren og sammenlign. - Send
POSTuden body. Svaret skal være400, ikke500.
### Hele listen
GET http://localhost:3000/api/patients
### Opret patient
POST http://localhost:3000/api/patients
Content-Type: application/json
{"cpr":"0201029994","navn":"Ny Test Person"}
### Uden body — skal give 400
POST http://localhost:3000/api/patients
### skiller requests ad. Den tomme linje skiller headers fra body — som i
selve HTTP-beskeden. Commit api.http; I bruger den igen i lektion 17.
Tjekliste
-
express.json()står før POST-routen -
POSTuden body eller udencpr/navngiver400— ikke500 - Vellykket
POSTgiver201 -
GETefterPOSTviser den nye patient - Genstart af processen fjerner den oprettede patient igen (listen var kun i RAM)
Øvelsen er i hus når…
du kan vise svaret fra POST og derefter GET i api.http, hvor den nye
CPR står i arrayet.
Hvis du sidder fast
- Ingen Send Request over requestet: filen skal ende på
.http, og REST Client skal være installeret. req.bodyerundefined: manglerexpress.json(),Content-Type-linjen eller den tomme linje før body.500medCannot destructure property 'cpr': skrivreq.body ?? {}.POSTgiver 404: routen er registreret efter catch-all — flytapp.postop.400medExpected property nameellerUnexpected token: JSON'en er ugyldig. Tjek anførselstegn og kommaer i body.connect ECONNREFUSED: serveren kører ikke. Startnode server.js.
Hvis du har ekstra tid
Send POST med samme CPR to gange. Beslut i gruppen, om det er OK i
mockuppet — I behøver ikke løse dubletter endnu. Notér det til lektion 15.
Samme request kan sendes fra terminalen med curl. Det er nyttigt, når der ikke er en editor — fx mod en server i skyen:
curl.exe -i http://localhost:3000/api/patients
Skriv curl.exe på Windows — i PowerShell er curl et alias for
Invoke-WebRequest.
Øvelse 4 — Tabellen mod jeres server
Mål: Gruppens patienttabel viser data fra jeres Express-server, også
efter I har tilføjet en patient fra api.http.
Det skal I nå
- Åbn mockuppet lokalt (HTML-fil eller dev-server), mens
node server.jskører.fetchkører i browseren, sålocalhostbetyder den maskine, browseren kører på. Åbner en anden jeres Vercel-side, pegerlocalhostpå deres maskine — ikke jeres server. - Bekræft at
fetchpeger påhttp://localhost:3000/api/patients. - Send
POSTfraapi.httpfor en patient, I kan genkende i jeres domæne (navn fra jeres testcase — ikke rigtige CPR). - Genindlæs siden eller kør den funktion, der henter listen igen. Den nye række skal vises.
- Skriv tre korte bullets til jeres projektlog: hvad ligger i browseren nu, hvad ligger på serveren, og hvad kommer i PostgreSQL i lektion 15.
Tjekliste
- Tabellen og
GETiapi.httpviser samme antal patienter - I kan forklare, hvorfor en anden, der åbner jeres Vercel-side, ikke ser patienterne fra jeres laptop
- Gruppen ved, at genstart af serveren sletter de oprettede patienter
Øvelsen er i hus når…
en anden i gruppen kan demo: POST fra api.http, refresh af tabellen, og forklaring
af hvor listen bor.
Hvis I sidder fast
Samme fejlsøgning som lektion 11: JSON i browseren på localhost:3000, men
tom tabel peger på URL eller CORS — ikke på Express syntaks.
Hvis I har ekstra tid
Tegn sekvensdiagram: bruger, browser, Express — med GET efter POST.
Databasen som livlinje med note «lektion 15».
Prøver I at POST'e med fetch fra siden i stedet for api.http, fejler det på
CORS. Browseren sender først et OPTIONS-request (preflight), som jeres
server svarer 404 på. Det er ikke en del af dagens øvelse.