Skip to content

Instantly share code, notes, and snippets.

@thinkphp
Created August 29, 2026 10:29
Show Gist options
  • Select an option

  • Save thinkphp/f705085c7ea1b7e38f142960a4356c06 to your computer and use it in GitHub Desktop.

Select an option

Save thinkphp/f705085c7ea1b7e38f142960a4356c06 to your computer and use it in GitHub Desktop.
Create SErver cu comentarii
const http = require('http');
const fs = require('fs');
const url = require('url');
//factorial(3) = 1 * 2 * 3 = 6
function factorial( num ) {
if(num < 0) return "Nu se poate calcula factorialul pentru numere negative!";
let result = 1;
for(let i = 1; i <= num; ++i) {
result *= i;
}
return result;
}
/*
url.parse(req.url, true) -----> transofmra URL-ul cerut ?number = 5 intr-un obiect
url.parse(req.url, true)
parametrul true face ca query sa fie deja un obiect Javascript , nu un string {number: '5'}
http.createServer() primeste o functie callback care se executa de fiecare data cand vine o cerere HTML
req ---> contine informatii despre cerere
res ---> este folosit pentru a trimite raspunsul
*/
//Create the SERVER
const server = http.createServer((req, res) => {
const parseUrl = url.parse(req.url, true);
const query = parseUrl.query; //query poate avea reprezentarea query = {number: 5} query.number este 5
//TRimite pagina HTML
if(req.method === 'GET' && parseUrl.pathname === '/') {
//input index.html ----> callback (err, data)
fs.readFile('index.html', (err, data) => {
if( err ) {
res.statusCode = 500
res.end("Eroare la incarcarea fisierului HTML");
return;
}
res.statusCode = 200;
res.setHeader("Content-Type", "text/html");
res.end( data );
})
//raspunde la cerere la calculul factorialul
//query.number = 5
} else if(query.number && !isNaN(query.number)) {
const number = parseInt(query.number); //convertesc la INTEGER
const result = factorial( number ); //calculez factorialul
//backend Node raspunde cu rezultatul in format JSON
res.setHeader('Content-Type', 'application/json') //setez Header ca fiind JSON
res.statusCode = 200 // OK
res.end(JSON.stringify({result: result}))
} else {
res.statusCode = 400
res.end(JSON.stringify({error: "Te rog sa furnizezi un numar valid prin paramentrul number in url"}))
}
})
//porneste serverul
server.listen(3000, "localhost", () => {
console.log("Serverul ruleaza la http://localhost:3000")
})
//Frontend HTML,JavaScript ---> Backend (NodeJS)
//GET
// Module importante
//NEST, Express
//require('http') este modulul native Node.js pentru a crea un Server WEb
//fs file system pentru a citi fisiere de pe disc , in cazul nostru citim fisierul index.html
//url - pentru a analiza parse URL--ul cererii si extrage parametrii din queue string
//http.createServer() primeste o functie callback care se executa de fiecare data cand vine o cerere HTTP req, ce contine
//informatii despre cerere, res este folosit pentru a trimite raspunsul
//{number: 5}
//1) Cererea GET pentru pagina principala "/"
///daca cineva acceseaza http://localhost:3000 , serverul citeste fisierul index.html de pe harddisk si il trimite ca raspuns.
//daca fisierul nu poate fi citit (sau nu exista), returneaza eroare 500
//2) Cererea cu parametru number
/*
Dar URL-ul contine ?number = 5 de exemplu, verifica daca valoarea exista si este un numar valid (!isNaN), apoi calculeaza
//factorialul si il TRIMITE inapoi ca JSON {result: 120}
http://localhost:3000/ -->AFISEAZA index.html
http://localhost:3000/?number=5 ==>Raspunde {"result":120}
http://localhost:3000/?number=abc --->raspunde cu error 400
Serverul asculta la portul 3000 doar pe localhost (nu e accesibil din retea externa). Cand porneste cu success serverul , afiseaza un mesaj in consola
HOMEwork:
- frontend: input n = 101 ===> PRIME
function verificareNumerePrime() {
}
update DOM
- backend : functie de verificare a unui number: prime sau nu este prime
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment