Created
August 29, 2026 10:29
-
-
Save thinkphp/f705085c7ea1b7e38f142960a4356c06 to your computer and use it in GitHub Desktop.
Create SErver cu comentarii
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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