lek 5 Flashcards
Zakaj Node.js sam po sebi ni primeren za razvoj kompleksnih spletnih aplikacij in kako lahko to omejitev rešimo?
Node.js sam po sebi NI spletni framework
Čeprav je Node zelo zmogljivo okolje za izvajanje JavaScript kode, nima vgrajene podpore za spletni razvoj.
To pomeni, da ni vnaprej pripravljenih orodij za:
obdelavo HTTP zahtev (npr. GET, POST),
delo z URL-ji (usmerjanje ali routing),
generiranje HTML iz predlog (templates),
upravljanje stanja aplikacije glede na naslovno vrstico.
✅ Kaj lahko storimo?
🔹 Možnost 1: Sami zapišemo vse od začetka
Sami napišemo logiko za vsako zahtevo, kar pa je težje, dolgotrajnejše in manj pregledno.
Uporabno za zelo preproste aplikacije ali učenje osnov.
🔹 Možnost 2: Uporabimo spletno ogrodje (web framework)
Ti ogrodja dodajo funkcionalnosti, ki v osnovnem Node ni vključena.
Primeri ogrodij:
Express – najbolj znan in uporabljen, preprost in lahek
Spletna aplikacija potrebuje:
razumevanje URL-jev (routing),
obdelavo različnih tipov zahtev (GET, POST…),
sposobnost prikaza vsebin dinamično glede na uporabnika (template rendering),
urejeno kodo (strukturiranost, moduli…).
Kaj je Express.js?
Minimalistično in hitro ogrodje za razvoj spletnih aplikacij v Node.js.
omogoča obdelavo HTTP zahtev (vzpostavitev TCP povezave, pošiljanje odgovorov), usmerjanje (routing) zahtev na podlagi URL-jev in metod (GET, POST itd.), podporo vmesnemu programju (middleware), uporabo predlog (templates) za dinamično generiranje HTML ter generiranje kode prek ukazne vrstice (CLI).
Na njega se povezuju druge vmeske prog opreme oz middleware.
Zakaj uporabljamo Express?
Zaradi lažjega usmerjanja (routing), middleware podpore in generiranja HTML z uporabo predlog.
Express to omogoča tako, da vanj ‘vklapljamo’ različne middleware module (npr. za avtentikacijo, zaščito CSRF, CORS…).
Kaj je middleware v Expressu?
Funkcija, ki obdeluje zahtevo preden pride do glavne logike.
Kakšna je vloga middleware modulov v Express.js in katere naloge lahko z njimi izvajamo?
Middleware v Express.js delujejo kot vmesni sloj obdelave zahtevkov. Uporabljajo se za preverjanje pristnosti uporabnika, delo s sejami, piškotki, obdelavo URL parametrov, zagotavljanje varnosti (npr. CORS, CSRF zaščita) in drugo. Middleware se verižijo v zaporedju in omogočajo fleksibilno, modularno obdelavo zahtevkov pred končnim odgovorom.
namestitev expressa koda
npm install express-generator -g
Kaj omogoča Express generator? 20
Ustvari osnovno strukturo aplikacije z ukazom express –view=hbs appname.
Primerjava express vs. node strežnik
1.http modul Node.js
const http = require(‘http’);
let app = http.createServer((req, res) => {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World!\n’);
});
app.listen(3000, ‘127.0.0.1’);
console.log(‘Node server running on port 3000’);
———————————————————
require(‘http’): vključimo privzeti Node.js HTTP modul.
http.createServer(…): ustvarimo strežnik in ob vsaki zahtevi pošljemo besedilo “Hello World”.
res.writeHead(…): nastavimo statusni odgovor in tip vsebine.
res.end(…): zaključimo odgovor.
listen(…): strežnik začne poslušati na vratih 3000.
2.express
var express = require(‘express’);
var app = express();
app.get(‘/’, function(req, res) {
res.send(‘Hello World!’);
});
app.listen(3000, function() {
console.log(‘Example app listening on port 3000!’);
});
——————————————————————
require(‘express’): vključimo Express knjižnico.
express(): ustvarimo novo aplikacijo.
app.get(‘/’): definiramo, da se za GET zahtevo na / pošlje besedilo ‘Hello World’.
app.listen(…): strežnik začne poslušati na vratih 3000.
Lastnost | Node.js http | Express.js
Nastavitev strežnika |
ročno (http.createServer) |
enostavno z express()
Obdelava zahtev |
ročna (če req.url == …) |
z app.get/post/…
Berljivost in struktura
| manj pregledna
| veliko bolj čista in razumljiva
Razširljivost (middleware)
| ni podprto neposredno
| močno podprta (npr. app.use(…))
Predloge, seje, piškoti |
potrebuje dodatno kodo
| pogosto že pripravljeni moduli
Kaj je Express modul v Node.js in katere ključne funkcionalnosti ponuja objekt app v Express aplikaciji? Navedi tudi primer uporabe.
var express = require(‘express‘);
Objekt, ki predstavlja express aplikacijo: var app = express();
Metode, ki jih vsebuje app:
Usmerjanje (routing)
Določimo, kako naj aplikacija odgovori na določene URL-je in HTTP metode (GET, POST, …).
Pr:
app.get(‘/’, function(req, res) {
res.send(‘Hello World!’);
});
Vmesni nivo (middleware)
Uporabimo ga za obdelavo zahtev preden pridejo do cilja (npr. preverjanje prijave, sej, piškotkov).
Upodabljanje HTML (templating engine)
Lahko integriramo sisteme, kot je Jade (danes Pug), ki omogočajo generiranje HTML strani znotraj Express aplikacije.
Kaj omogoča app.get() v Expressu?
Obravnava GET HTTP zahtev na določeni poti, ko ga dobimo vrnemo povratni klic
Kaj omogoča app.use()?
Doda middleware funkcijo, ki se izvede za vsako zahtevo na poti.
Kaj je razlika med statično in dinamično potjo v Expressu?
Statična pot je npr. ‘/about’,
app.get(‘/about’, (req, res) => {
res.send(‘To je about stran’);
dinamična pa vsebuje parametre, npr. ‘/user/:id’. Del poti je spremenljivka (parameter)
Primer: /test/:name/:year pomeni, da :name in :year lahko zamenjamo z dejanskimi vrednostmi (npr. tomaz/1978)
Kako dostopamo do teh parametrov?
Z uporabo objekta req.params. sl 12
Uporaba regex (regularnih izrazov)
Z regex lahko omejimo, kakšni parametri so dovoljeni.
Primer: ta del poti :year((19[0-9]{2}|20[012][0-9])) dovoli samo letnice od 1900 do 2029.
Kaj je req.params v Expressu?
Vsebuje parametre iz URL-ja, npr. :id.
Kaj je req.query?
Vsebuje podatke iz URL poizvedb, npr. ?name=Ana.
Kaj je req.body in req.get(field)?
Vsebuje podatke iz telesa POST ali PUT zahteve.
req.get(field) – vrne vrednost določenega polja glave HTTP
Kaj je res.send()?
Pošlje odgovor nazaj odjemalcu in zaključi zahtevo.
Kaj je res.status()?
Nastavi statusno kodo HTTP odgovora.
res razlicne
◼ Objekt s številnimi metodami za nastavitev HTTP odgovora ▪ res.write (content) - sestavimo telo odgovora z content ▪ res.status (code) - nastavimo HTTP kodo za odgovor ▪ res.set (prop, value) - nastavimo lastnost glave odgovora na vrednost ▪ res.end () - končamo zahtevo in vrnemo odgovor ▪ res.end (msg) - končamo zahtevo z odgovorom msg ▪ res.send (vsebina) – vrnemo odgovor, write() in end()
Katere tri parametre sprejme funkcija vmesnega sloja?
req (zahteva), res (odgovor), next (naslednja funkcija v verigi).
Kaj pomeni funkcija next() in Kaj se zgodi, če middleware ne pokliče next()?
Prenese zahtevo na naslednji middleware.
Zahteva se ustavi, nadaljnja obdelava se ne izvede (blokada).
Kako dodamo middleware samo za določeno pot?
Z uporabo app.use(‘/pot’, middlewareFunc).
Kdaj uporabimo res.send() znotraj middleware funkcije?
Ko želimo končati obdelavo in poslati odgovor (npr. napaka, nepooblaščeno).
Kaj pomeni “middleware funkcije sodelujejo v ciklu zahteva-odgovor”?
To pomeni, da middleware lahko spremeni ali prekine tok zahtevka preden se pošlje odgovor.
Kako dodamo modul za vmesni sloj in kako ga vključimo v Express aplikacijo?
Najprej ga namestimo z ukazom npm install morgan. Nato ga vključimo z require(‘morgan’) in dodamo z app.use(logger(‘dev’))