Globalni Objekat
U Node.js-u, globalni objekat služi kao kontejner za sve globalne varijable koje su dostupne u svim modulima vaše aplikacije. Slično objektu window u pregledačima, globalni objekat u Node.js-u omogućava pristup različitim globalnim funkcijama i varijablama, poput console, setTimeout, i clearTimeout. Da bi se pristupilo globalnom objektu, možete koristiti ključnu reč global.
Evo nekih komponenti Node.js-a koje su dostupne na globalnom nivou:
- global – Referenca na sam globalni objekat.
- process – Objekat koji pruža informacije i kontrolu nad trenutnim Node.js procesom.
- console – Pruža pristup standardnim funkcijama za ispis.
- Buffer – Klasa za rad sa binarnim podacima.
- setImmediate(), clearImmediate() – Funkcije za asinhrono izvršavanje koda.
- setTimeout(), clearTimeout(), setInterval(), clearInterval() – Funkcije za upravljanje izvršavanjem koda na osnovu vremena.
- module, exports, require() – Osnovne funkcije za upravljanje modulima.
- __dirname, __filename – Sadrže putanje do direktorijuma i fajla trenutnog modula.
NAPOMENA:
Korišćenje globalnog objekta za deljenje varijabli između modula nije preporučljiva praksa zbog potencijalnih problema sa održavanjem i testiranjem koda.
Module Wrapper Function
Moduli u Node.js-u omogućavaju izolaciju delova koda u odvojene jedinice. U Node.js-u, svaki modul se automatski obavija u funkciju. Ova wrapper funkcija omogućava modulima da imaju sopstveni privatni obim, gde elementi globalnog objekta: exports, require, module, __filename, i __dirname postaju sada njeni lokalni parametri funkcije. To znači da kada pišete kod u nekom Node.js modulu, vi zapravo pišete kod unutar ove wrapper funkcije.
1 2 3 4 5 6 7 8 9 10 |
(function wrapperFunction(exports, require, module, __filename, __dirname) { // Na primer, definisemo neku funkciju function nekaFunkcija() { console.log("Pozdrav iz moje funkcije!"); } // Eksportujemo funkciju tako da može biti korišćena u drugim modulima module.exports = nekaFunkcija; })() |
- exports: Ovaj objekat se koristi za izvoz metoda ili promenljivih iz modula. Bilo koji svojstvo ili metoda dodana na exports objekat postaje deo javnog interfejsa modula.
123exports.myFunction = function() {console.log('Ovo je funkcija izvezena iz modula');}; - require(): Funkcija koja se koristi za učitavanje drugih modula.
1const fs = require('fs'); - module: Ovaj objekat predstavlja trenutni modul i sadrži informacije o njemu, uključujući exports objekat.
12345module.exports = {myFunction: function() {console.log('Ovo je funkcija izvezena iz modula');}}; - __filename: Apsoslutna putanja do trenutnog fajla modula. To znači da pokazuje punu putanju od korena fajl sistema do lokacije gde se fajl nalazi.
1console.log(__filename); // Prikazuje punu putanju do trenutnog fajla - __dirname: Putanja do direktorijuma trenutnog modula.
1console.log(__dirname); // Prikazuje punu putanju do direktorijuma trenutnog fajla
Zamisli da su moduli kao kutije sa alatima. Svaka kutija (modul) ima svoje alate (metode) koje možeš koristiti kada imaš dostupnu tu kutiju. Ako želiš da tvoj prijatelj koristi neke od tvojih alata, staviš ih u “posebnu” kutiju koju mu pošalješ. U svetu Node.js-a, to je kao kada koristiš module.exports da “staviš alate u kutiju” i require() da “otvoriš kutiju” koju ti je neko poslao.
Sada, zamisli da svaka kutija automatski dobije posebnu torbu kada je šalješ. U tu torbu možeš staviti sve što ti treba da tvoji alati rade kako treba, kao uputstva ili dodatne delove. U Node.js-u, to je kao “Module Wrapper Function”. Kad napišeš kod u modulu, Node.js automatski stavlja tvoj kod u tu posebnu funkciju (torbu) koja ti daje neke korisne stvari poput exports, require, module, __filename, i __dirname, tako da tvoj kod može lepo da radi sa ostalim delovima aplikacije.
Dakle, “Module Wrapper Function” je kao “magična” torba koja osigurava da svaka kutija (modul) ima sve što joj treba da bi alati (kodovi) unutra radili kako treba, čak i kada su poslati negde daleko
Imoport/Export Modula
Da bi neki modul bio dostupan u drugim delovima aplikacije, koristi se CommonJS sintaksa: module.exports za izvoz, a require() za uvoz modula. Više o CommonJS možete pročitati u članku Modularno programiranje (eksterna sintaksa)
Primer
Ovde je prikazan modul koje exportuje jednu funkciju:
1 2 3 4 5 6 7 |
// mojModul.js function pozdrav(naziv) { console.log(`Pozdrav, ${naziv}!`); } // Eksportujemo funkciju module.exports = pozdrav; |
A u sledećem kodu se vidi kako se može pristupiti i iskoristiti ta funkcija u nekom drugom fajlu/modulu:
1 2 3 4 5 |
// Importujemo funkciju pozdrav iz mojModul.js const pozdrav = require('./mojModul'); // Koristimo importovanu funkciju pozdrav('Svete'); |
Ugrađeni Moduli u Node.js-u
Node.js dolazi sa bogatim setom ugrađenih modula koji su dizajnirani da olakšaju razvoj aplikacija. Ovi moduli obuhvataju širok spektar funkcionalnosti, od manipulacije fajlovima do kreiranja HTTP servera. Evo nekoliko ključnih:
- Path Module: Ovaj modul pruža alate za rad sa putanjama fajlova i direktorijuma.
Primer
12345678910111213const path = require('path');// Spajanje delova putanje u celinuconst fullPath = path.join(__dirname, 'data', 'example.txt');console.log('Puna putanja fajla:', fullPath);// Dobijanje poslednjeg dela putanje (naziva fajla)const fileName = path.basename(fullPath);console.log('Naziv fajla:', fileName);// Dobijanje ekstenzije fajlaconst extension = path.extname(fileName);console.log('Ekstenzija fajla:', extension); - OS Module: Omogućava interakciju sa operativnim sistemom.
- FileSystem Module: Pruža funkcije za čitanje, pisanje i manipulisanje fajlovima.
- Events Module: Omogućava rad sa događajima kroz implementaciju observer patterna.
- Http Module: Omogućava kreiranje HTTP servera i klijenata.
Primer
1234567891011const http = require('http');const server = http.createServer((req, res) => {res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('Hello, World!');});const port = 3000;server.listen(port, () => {console.log(`Server je pokrenut na portu ${port}.`);});