Kliknite tukaj, da si ogledate profil, kot ga vidijo drugi

Uvod v Node.js

  Vzpostavili bomo node.js okolje in ustvarili preprosti spletni strežnik.
 
 
1
 
 

Node.js je odprto-kodno, več platformno, JavaScript izvajalno okolje za razvoj različnih orodij in aplikacij, ki je v zelo kratkem času doživelo uspeh na svetovnem merilu in je danes eden izmed najbolj znanih platform za pisanje spletnih aplikacij.

Izvajalno okolje interpretira z Googlovim V8 JavaScript pogonom, poglavitne temelje node.js pa postavita dogodkovno orientiran model in asihrone vhodno/izhodne operacije. Z njima omogočimo skalabilnost strežnika, saj je node.js enoniten (vsaka zahteva na strežnik ne bo imela svoje niti) in potrebuje drugačne oprijeme!

Uvod bo obsegal namestitev node.js in primer preprostega strežnika.

 
 
2
 
 

Sama namestitev platforme je enostavna. Na uradni spletni strani kliknemo na gumb prenosi (https://nodejs.org/en/download/) in izberemo ustrezno različico za naš sistem.

Po namestitvi v terminalno okno vpišemo »node -v« in preverimo, če je bila namestitev uspešna (izpisati se mora verzija, podobno kot je na sliki).

Enako še preverimo z ukazom »npm« in preverimo, če imamo naloženega upravljalca paketov, ki je nujno potreben za produktivno delo v node.js okolju.

Za node.js je na voljo ogromno razvojnih okolij. Lahko uporabimo naprednejšo beležko, ali kakšno integrirano razvojno okolje kot je WebStorm, Nodeclipse, Visual studio, …

Jaz bom uporabljal Visual Studio Code, ki je zastonj in ima integriran terminal. Namestitev se nahaja na naslovu: https://code.visualstudio.com.

 
 
3
 
 

Sedaj, ko imamo okolje vzpostavljeno, se lahko lotimo strežniškega dela. Najprej si nekje na računalniku ustvarimo mapo, v kateri bo naš node.js projekt (jaz sem mapo imenoval kar zmaga).

V Visual Studio Code naš projekt odpremo tako, da gremo pod »File«, ter izberemo »Open folder«. Tukaj poiščemo našo mapo projekta (v mojem primeru: zmaga) in jo izberemo. Našo okolje bi moralo sedaj izgledati enako kot je na sliki.

 
 
4
 
 

Ustvarimo novo datoteko v našem projektu, tako da kliknemo gumb označen na sliki. Poimenujmo ga index.js.

Sedaj lahko v to datoteko (index.js) pišemo poljubno javascript kodo, ki se bo izvajala na strežniku.

 
 
 
 
 
5
 
 

Zapišimo v datoteko »console.log('pozdravljen svet!');« in jo shranimo (Ctrl+S). Skripto poženemo z ukazom »node index.js«.

Izhod bi moral biti enak, kot je prikazano na sliki. Cilj vodiča je vzpostaviti preprost strežnik, tak da nadaljujmo z lekcijo.

 
 
6
 
 

Da si olajšamo delo nam pomaga Node Package Manager. NPM je upravljalec paketov za node.js aplikacije. Uporabljamo ga, da naložimo pakete (funkcije, razrede,…), ki jih bomo uporabljali za razvoj naših aplikacij. NPM je prav tako register v katerem so komponente hranjene in indeksirane.

Na spletni strani https://www.npmjs.com/ lahko brskamo pakete ter si preberemo dodatne informacije.

Naložili bomo paket express.js z ukazom »npm install express  --save«. Express je minimalna in fleksibilna node.js knjižnica, ki omogoča lažji razvoj spletnih aplikacij.

 
 
7
 
 

Ko imamo express modul naložen ga lahko vključimo v kodo z uporabo konstrukta »require«.

Sledeča koda vzpostavi spletni strežnik na vratih 8080. In preko URL poti »/gor« in »/dol« spreminja števec. Ko imamo kodo vstavljeno, zaženemo strežnik (oz. javascript datoteko) z ukazom »node index.js«.

Ob obisku http://localhost:8080/gor ali http://localhost:8080/dol se bo števec primerno povečal ali pomanjšal. Da strežnik izklopimo, pošljemo v terminal signal za izklop (CTRL + C)!

Koda:

var express = require('express');

var app = express();

var stevec = 0;

app.get('/gor', (req, res) => {

  res.send(`Stevec = ${++stevec}`);

});

app.get('/dol', (req, res) => {

  res.send(`Stevec = ${--stevec}`);

});

app.listen(8080, () => {

  console.log('http://localhost:8080/gor ali http://localhost:8080/dol');

});

Zanimivost:

Ko poženemo ukaz »node index.js«. Se vsebina datoteke »index.js« naloži v izvajalno okolje in se izvaja dokler se ne prekine izvajanje. Tako ne moremo spreminjati datoteke in pričakovati sprememb v času izvajanja. Vsaka sprememba zahteva ponovno nalaganje kode v izvajalno okolje. Ker je node.js enoniten in vse zahteve obravnava isti proces, bodo vse zahteve imele dostop do spremenljivke »števec«.

 

Tukaj je ideologija drugačna kot pri PHP, kjer za vsako zahtevo zaženemo nov proces .php datoteke in posledično je takšno deljenje števec spremenljivke (vsaj v takšnem kontekstu) nemogoče. Ko se zahteva / dogodek v node.js konča, se čaka v dogodkovni zanki na novo opravilo / zahtevo. Proces pa bo aktiven, dokler ga ne bomo terminirali ali pa se bo program končal. V našem primeru se ne bo končal sam, saj ima spletni strežnik registrirano dogodkovno zanko, ki ves čas preverja za zahteve.

 
 
Komentiraj
 
 
 
 
 
25.9.2018, 21:16
Lepo, da je na tem portalu videti še kaj aktualnega. Sicer bi rad dodal / popravil nekaj stvari.

Točka 6)

Avtor je pozabil povedati namen knjižnice Express.js. Uporablja se za dva namena: prvi in glavni namen je usmerjanje zahtev HTTP (routing). Drugi namen je ustvarjanje posredniških funkcij (middleware). To so funkcije, ki se lahko kličejo vmes med začetkom in koncem življenjskega cikla usmerjanja. Primeri uporabe bi bili preverjanje avtentikacije / avtorizacije zahteve, obdelave glave HTTP (headerjev) zahteve ipd. Omeniti je vredno tudi, da knjižnica Express.js predstavlja "E" v skladu tehnologij MEAN (MongoDb, Express.js, Angular, Node.js).

Prav tako bi bilo vredno omeniti, zakaj je pomembno, da dodamo zastavico --save (slednja povzroči, da se nameščen modul zabeleži v datoteko package.json, kar omogoča, da lahko vse module v projektu ponovno namestimo po potrebi z ukazom npm install).



Točka 7)

Z ukazom require lahko, kot je avtor dejal, nalagamo (vključimo) module, kot je denimo express.

require v osnovi vrne vsebino spremenljivko module.exports v dani datoteki.

Če ustvarimo npr. modul "Oseba" znotraj datoteke test.js, ki je v isti mapi kot naš index.js, bi to izgledalo takole:


oseba.js:

class Oseba// class je ES6 standard javascripta
{
constructor(ime, priimek)
{
this.ime = ime;
this.priimek = priimek;
}

izpis()
{
console.log(`Sem ${ime} ${priimek}.`);
}
}

index.js:

const Oseba = require('./oseba.js'); // poti do modula moremo pripeti relativno pot

let janez = new Oseba('Janez', 'Novak');

janez.izpis(); // V konzolo se izpiše niz "Sem Janez Novak."

Za rabo sodobnega Node.js je pametno preučiti novejše standarde jezika Javascript, zlasti ES5 in ES6 (ES == ECMAScript == jezikovni standard jezika Javascript). Avtor namreč uporablja t.i. lambda izraze ( () => { console.log("test");}), nič pa ni omenil, da le-ti izvirajo iz standarda ES5, ki je že pred časom bil vgrajen v interpreter znotraj Node.js.


In še komentar na odsek "Zanimivost":

"Ko poženemo ukaz »node index.js«. Se vsebina datoteke »index.js« naloži v izvajalno okolje in se izvaja dokler se ne prekine izvajanje." - Ali obstaja programska koda, ki se izvaja tudi po tem, ko se izvajanje prekine? Nesmisel, najbrž lapsus.

"Tako ne moremo spreminjati datoteke in pričakovati sprememb v času izvajanja." - Z ustreznimi orodji lahko, vendar le navidezno: izvajanje se resetira in se reproducira isto programsko okolje, kot v času razhroščevanja.

"Ker je node.js enoniten in vse zahteve obravnava isti proces, bodo vse zahteve imele dostop do spremenljivke »števec«."

Res je, vendar je to precej nekorektna praksa - raba globalnih spremenljivk je bržkone nezaželena v kateremkoli programskem jeziku, tudi ko programiramo Node.js. Običajno so na globalni ravni konstante in moduli / razredi.

"Proces pa bo aktiven, dokler ga ne bomo terminirali ali pa se bo program končal."- Temu nikakor ne moremo reči posebnost jezika Node.js ali zanimivost, gre osnovno za lastnost prav vsakega računalniškega programa.

Prav tako je govor o dogodkovni zanki po mojem mnenju malo zavajajoč za začetnika, sploh glede na to, da v članku ni ne omembe ne demonstracije asinhronih funkcij.






 
Prijava in registracija
 
 
 
Zmaga.com ponuja brezplačno in razumljivo učenje računalniških programov, vas na enkraten način spozna z različnimi svetovnimi jeziki, s podrobno obrazloženimi recepti prikaže čare kulinarike in vam prežene strahove pred domačimi opravili.
 
 
Poleg tega lahko prebirate poučne članke, ki so namenjene širjenju naše splošne razgledanosti ter preverite svoje znanje z priljubljenim in enostavnim sistemom za preverjanje znanja. Če med vsebinami, ki se dodajajo vsak dan, ne najdete želenega znanja, je za vaša vprašanja na voljo dobro obiskan forum, kjer lahko tudi aktivno sodelujete. V primeru, da bi radi svoje praktično znanje delili z ostalimi, pa to lahko storite preko preprostega vmesnika za dodajanje vsebin. Zmagajte z znanjem z Zmaga.com!