Capitol gratuit

Node.js - fundamente

Node.js este un runtime JavaScript construit pe motorul V8 al Google Chrome. Permite executarea JavaScript in afara browserului, pe server. Caracteristica...

Ce este Node.js?

Node.js este un runtime JavaScript construit pe motorul V8 al Google Chrome. Permite executarea JavaScript in afara browserului, pe server. Caracteristica definitorie este modelul event-driven, non-blocking I/O care il face ideal pentru aplicatii cu multe conexiuni simultane.

Instalare si configurare

Recomandam instalarea prin nvm (Node Version Manager) pentru a putea gestiona mai multe versiuni:

# Instalare nvm (Linux/macOS)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash

# Instalare Node.js LTS
nvm install --lts
nvm use --lts

# Verificare instalare
node --version    # v22.x.x
npm --version     # 10.x.x

Initializare proiect

# Creare proiect nou
mkdir api-project && cd api-project
npm init -y

# Structura package.json
{
"name": "api-project",
"version": "1.0.0",
"type": "module",         // ES Modules
"scripts": {
"dev": "node --watch src/index.js",
"start": "node src/index.js"
}
}
💡 ES Modules vs CommonJS

In 2026, folosim ES Modules (import/export) ca standard. Adaugati "type": "module" in package.json. CommonJS (require) este legacy dar inca prezent in multe pachete.

Event Loop si modelul asincron

Node.js ruleaza pe un singur thread dar gestioneaza mii de conexiuni simultane prin Event Loop. Operatiile I/O (citire fisiere, cereri retea, queries baze de date) sunt delegate kernel-ului sau thread pool-ului, iar callback-urile sunt executate cand operatia se termina.

Fazele Event Loop

  1. Timers - executa callback-uri setTimeout/setInterval
  2. Pending Callbacks - callback-uri I/O amanate
  3. Poll - asteapta si proceseaza noi evenimente I/O
  4. Check - executa callback-uri setImmediate
  5. Close Callbacks - curatare resurse

Async/Await si Promises

// Promise chain - mai greu de citit
fetchUser(1)
.then(user => fetchOrders(user.id))
.then(orders => console.log(orders))
.catch(err => console.error(err));

// Async/await - cod clar si lizibil
async function getUserOrders(userId) {
try {
const user = await fetchUser(userId);
const orders = await fetchOrders(user.id);
return orders;
} catch (error) {
console.error('Eroare:', error.message);
throw error;
}
}

// Executie paralela cu Promise.all
async function getDashboardData(userId) {
const [user, orders, notifications] = await Promise.all([
fetchUser(userId),
fetchOrders(userId),
fetchNotifications(userId)
]);
return { user, orders, notifications };
}
⚠️ Evitati blocarea Event Loop-ului!

Operatiile sincrone intensive (calcule complexe, procesare fisiere mari) blocheaza Event Loop-ul si afecteaza toate cererile. Folositi Worker Threads pentru calcule CPU-intensive sau delegati la servicii separate.

Module Node.js esentiale

import fs from 'fs/promises';      // Sistem de fisiere (async)
import path from 'path';            // Manipulare cai
import { createServer } from 'http'; // Server HTTP nativ
import crypto from 'crypto';        // Criptografie
import { URL } from 'url';          // Parsare URL-uri
import EventEmitter from 'events';  // Pattern observer

// Citire fisier async
const data = await fs.readFile('./config.json', 'utf-8');
const config = JSON.parse(data);

// Server HTTP minimal (fara Express)
const server = createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Hello API!' }));
});
server.listen(3000, () => console.log('Server pe portul 3000'));

npm si gestionarea dependentelor

# Instalare pachete
npm install express           # Dependenta de productie
npm install -D nodemon        # Dependenta de dezvoltare

# Pachete utile pentru backend
npm install express cors helmet dotenv
npm install jsonwebtoken bcryptjs
npm install prisma @prisma/client
npm install zod               # Validare schema
npm install winston            # Logging

Structura recomandata proiect Node.js

src/ - codul sursa principal

src/routes/ - definitii rute API

src/controllers/ - logica de business pentru fiecare ruta

src/middleware/ - middleware-uri (auth, validare, erori)

src/models/ - modele si scheme baze de date

src/services/ - logica de business reutilizabila

src/utils/ - functii helper

tests/ - teste unitare si de integrare

Continuați cu restul cursului

Acesta este capitolul 3 din cele 20 ale cursului, cu 6 lecții din 82. Cumpărați cursul și parcurgeți tot conținutul în cont, cu progres salvat, test final și certificat.

Cumpărați cursul la 110 €