Claudia Chiriță . 2023/2024
home:~$ node
home:~$ node app.js
var module = require('module_name');
npm install module_name --save
npm init
pentru crearea fișierului 'package.json' în rădăcină
var http = require("http");
var server = http.createServer(handler);
// întoarce un obiect din clasa http.Server
pornirea serverului pe un port dat
server.listen(port, host, backlog, callback)
http.createServer(function(request,response){...});
// funcție care se execută atunci când clientul face o cerere
write() end() setTimeout()
evenimente ce pot fi tratate:
response connect continue ...
request.write(chunk[, encoding][, callback])
// trimite o parte din datele din corpul cererii
request.end([data[, encoding]][, callback])
// încheie trimiterea cererii
writeHead() getHeader() removeHeader() write() end()
evenimente ce pot fi tratate:
close finish
proprietăți utile:
statusCode headersSent
response.write(chunk[, encoding][, callback])
// trimite o parte din date către client
response.writeHead(statusCode[, statusMessage][, headers])
// trimite un antet de răspuns
response.end([data[, encoding]][, callback])
// răspunsul e complet
// un program JavaScript care răspunde cu un mesaj
// de salut la toate cererile adresate de clienți Web
var http = require('http')
// folosim modulul 'http' predefinit
var server = http.createServer( // creăm un server Web
// funcție anonimă ce tratează o cerere
// și trimite un răspuns
function(request,response){
console.log("Am primit o cerere..");
// stabilim valori pentru diverse câmpuri-antet HTTP
response.writeHead(200, {"Content-Type" : "text/html"});
// emitem răspunsul propriu-zis conform tipului MIME (cod HTML)
response.end('Salutări din Node.js! :)
');
});
//server.listen(function(){console.log(server.address().port);});
server.listen(7000,function(){console.log ('Serverul creat așteaptă cereri la http://localhost:7000/');});
// serverul așteaptă cereri la portul 7000 al mașinii locale
const myURL = new URL(input[, base])
// creează un obiect cu URL-ul parsat
myURL = new URL("http://example.com/foo/?p1=a&p2=b");
myURL = new URL("/foo/?p1=a&p2=b","http://example.com/");
const myURL = new URL('https://example.org/?abc=123');
// myURL: obiect din clasa URL
// myURL.searchParams : obiect din clasa URLSearchParams
console.log(myURL.searchParams.get('abc')); // 123
// program ce ilustrează procesarea URL-urilor
var url = require ('url');
var adresa = url.parse (
'http://TehniciWeb:8080/anulI/grupa141/?nume_student=Chirita¬a_student=3',
true // generează un obiect 'query' ce include câmpurile din querystring
);
console.log (adresa);
if (adresa['query'].nota_student >= 5) {
console.log (adresa['query'].nume_student + ', ai promovat examenul cu nota ' + adresa['query'].nota_student);
} else {
console.log (adresa['query'].nume_student + ', ne vedem la restanță :(');
}
readFile() writeFile() appendFile()
// variantele asincrone
readFileSync() writeFileSync() appendFileSync()
// variantele sincrone
// fs.readFile(fileName [,options], callback)
var fs = require('fs');
fs.readFile('file.txt',’utf8’, function (err, data) {
if (err) throw err;
console.log(data);
});
console.log(‘citire asincrona’);
// fs.readFileSync(fileName [,options])
var fs = require('fs');
var data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
console.log(‘citire sincrona’);
var fs = require('fs');
fs.readFile('test.json',function (err, data) {
if (err) throw err;
var json = JSON.parse(data);
fs.writeFileSync('test.html','');
for(var i = 0; i < json.length; i++)
fs.appendFileSync('test.html','
');
fs.appendFileSync('test.html','');
console.log('Operatie completa.');
});
var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res)
{
console.log("O cerere;");
var url_parts = new URL(req.url,'http://localhost:8080/');
console.log(url_parts);
if(url_parts.pathname =='/cale'){
var query = url_parts.searchParams;
fs.appendFileSync('date.txt', query.get('name') + ',' + query.get('age') + ',' + query.get('city')+ '\n');
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(query.get('name') + ' din ' + query.get('city') + ' are ' + query.get('age') + ' ani ');}
}).listen(8080);
console.log ('Serverul creat asteapta cereri la http://localhost:8080/');
const http = require('http');
const querystring = require('querystring');
const fs = require('fs');
const server = http.createServer(function(request, response){
var body = "";
console.log(request.url);
var url_parts = new URL(request.url,'http://localhost:8030/');
if(url_parts.pathname =='/salveaza'){
request.on('data', function(date){
body += date; console.log(body);
});
request.on('end', function(){
console.log("Am primit o cerere");
console.log(body);
var ob_body = querystring.parse(body);
//console.log(ob_body);
response.statusCode = 200;
response.setHeader('Content-Type', 'text/html');
response.write("<html><body><p>> " + ob_body.nume + " din grupa " + ob_body.grupa + " are nota " + ob_body.nota + " </p></body></html>");
response.end();
//adaugare in fisier
if (fs.existsSync("studenti.json")){
var date = fs.readFileSync("studenti.json");
ob = JSON.parse(date);}
else
ob = [];
ob.push(ob_body);
fs.writeFileSync("studenti.json",JSON.stringify(ob));
});
}
server.listen(8030, function(){console.log("serverul asculta pe portul 8030");});
if(url_parts.pathname =='/afiseaza'){
fs.readFile("studenti.json",function(err,date){
if(err) throw err;
var studenti = JSON.parse(date);
response.statusCode = 200;
response.write('<html><body><table style="border:1px solid black"><tr><td style="border:1px solid black">Student</td><td style="border:1px solid black">Grupa</td><td style="border:1px solid black">Nota</td></tr>');
for(s of studenti) {
response.write('<tr><td style="border:1px solid black">');
response.write(s.nume);
response.write('</td><td style="border:1px solid black">');
response.write(s.grupa);
response.write('</td><td style="border:1px solid black">');
response.write(s.nota);
response.write('</td></tr>');
}
response.write('</table></body></html>');
response.end();
});
}
});
server.listen(8030, function(){console.log("serverul asculta pe portul 8030");});
module.exports = {
myDate : function () {
var data = new Date();
return data; },
myMessage: function() { return 'Node.js';} };
var http = require('http');
var date = require('./mymodule');
http.createServer(function(req, res) {
console.log('am primit un request');
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<html><body>Astazi <b>' + date.myDate()
+ '</b> am invatat despre <b> '
+ date.myMessage() + '</b></body></html>');
}).listen(8050);
console.log ('Serverul creat asteapta cereri la http://localhost:8050/');
createCipheriv() createDecipheriv() update() final()
const crypto = require('crypto');
//includem modulul crypto
function encrypt(text){
var cipher = crypto.createCipheriv('aes128', // creeaza un obiect de tip algoritm de cifrare
'passwordpassword', 'vectorvector1234')
var crypted = cipher.update(text, 'utf8', 'hex') // criptarea textului
crypted += cipher.final('hex') // finalizarea criptarii
return crypted;
}
function decrypt(text){
var decipher = crypto.createDecipheriv('aes128',
'passwordpassword', 'vectorvector1234')
var dec = decipher.update(text, 'hex', 'utf8')
dec += decipher.final('utf8')
return dec;
}
console.log(encrypt("Hello world"));
console.log(decrypt("bcf5fd6d5cba937013bb69bcbf68907c"));
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'my.mail.node@gmail.com',
pass: 'nodemailer'
}}); //face autentificarea
var mailOptions = {
from: 'my.mail.node@gmail.com',
to: 'your.mail@gmail.com',
subject: 'Mesaj din Node.js',
text: 'Hello!'
}; //optiunile mesajului
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Mail trimis: ' + info.response);
}
});
npm install express --save
var express = require('express');
// importăm modulul express; obținem o funcție pe care
// o apelăm pentru a crea o aplicație express
var app = express(); // obiectul app corespunzător aplicației
// express are metode pentru:
// - definirea rutelor corespunzatoare cererilor HTTP
// - redarea HTML (template-uri folosind EJS)
// - accesul la resurse statice (middleware-ul express.static)
app.listen(5000);
// pornirea serverului la portul specificat
app.metoda(cale_ruta, callback)
function(request,response,next){..}
const express = require('express');
var app = express();
// ruta către rădăcina (cereri get) (http://localhost:5000/)
app.get( "/", function(req,res){ res.send(‘root’); });
// ruta către pagina1 (http://localhost:5000/pagina1)
app.get( "/pagina1", function(req,res){ res.send(‘cerere către pagina 1’); });
// ruta către toate paginile care se termina cu .html (http://localhost:5000/index.html)
app.get("/*.html", function(req,res){ //procesarea cererii });
app.listen(5000);
app.get('/cale', function(req, res) {...});
req.query // obiect ce conține parametrii din query
req.body // obiect ce conține body-ul parsat
req.path // partea din url denumită path
app.get('/cale', function(req, res) {...});
res.write(content) // scrie în conținutul răspunsului
res.status(code) // seteaza status codul răspunsului
res.end() // încheie răspunsul
res.end(msg) // încheie răspunsul cu un conținut
res.send(content) // write() + end()
res.redirect(url) // redirecționare către alt url
app.use(function (req, res, next) {...})
var express = require('express');
var app = express();
app.use('/pagina1', function(req, res, next){
// funcție middleware care se execută la fiecare request
// către '/pagina1’, înaintea funcției handler
var data = new Date();
console.log("O cerere catre pagina1 a fost primita in " + data);
next();
});
app.get('/pagina1', function(req, res){
// funcție handler care trimite răspunsul
res.send('Pagina 1');
});
app.listen(3000);
app.use(express.static(‘director’))
'director' este numele unui director static în folderul rădăcină al aplicației Express
var express = require('express');
var app = express();
app.use(express.static('html'));
app.use(express.static('poze'));
app.listen(3000);
'html' și 'poze' sunt directoare în folderul rădăcină al aplicației
app.use(express.urlencoded({extended:true/false}))
app.use(cale_ruta,express.urlencoded({extended:true/false}))
// cale_ruta - calea unde se vor trimite datele trimise cu post
// extended:true - permite obiecte încapsulate
app.use('/post', express.urlencoded({extended:true}));
app.post('/post',function(req, res) {console.log(req.body);
res.send(req.body.persoane.name + ' din '
+ req.body.city + ' are ' + req.body.age
+ ' (de) ani');})
npm install ejs --save
app.set('view engine', 'ejs');
<%- include(‘cale-fisier’) %>
<header>
<%- include(‘../partiale/header’); %>
</header>
<!-- views/partiale/head.ejs -->
<meta charset="UTF-8">
<title>Template cu EJS</title>
<style>
body {padding-top:50px;}
header{width:80%; border:1px solid red;}
footer{width:80%; border:1px solid blue;}
</style>
<!-- views/partiale/header.ejs -->
<nav>
<a href="">Meniu 1</a>
<a href="">Meniu 2</a>
<a href="">Meniu 3</a>
</nav>
<!-- views/partiale/footer.ejs -->
<p>Footer: pagină creată cu EJS</p>
response.render(cale-relativa-fisier, date)
// calea relativă la folderul views
// app.js
...
app.get('/myindex', function(req,res){
res.render('pagini/myindex');});
...
// ex1.ejs
...
<body>
<h1><%= titlu %></h1>
<p>><%= continut %></p>
<% var x="<b>paragraf</b>"%>
<p>Primul caz</p>
<%= x %>
<p>Al doilea caz</p>
<%- x %>
</body>
...
// app.js
....
app.get('/ex1', function(req,res){
res.render('pagini/ex1',{titlu:'Template cu EJS',
continut:'Pagina generata cu EJS'});});
...
// app.js
app.get('/for_vector', function(req, res) {
animale = ["tapir", "pisică", "wombat", "ornitorinc"]
plante = ["ghiocel", "tei", "mimoză"]
res.render('for_vector', {vector_animale: animale,
vector_plante: plante});
// for_vector.ejs
<ol>
<% for (var i = 0; i < vector_animale.length; i++) { %>
<li><%= vector_animale[i] %></li>
<% } %>
</ol>
<p>
<% var x = Math.random();
if (x<0.5) {%>
<%= (x+"e mai mic ca 0.5") %>
<% } else {%>
<%= (x+"e mai mare ca 0.5") %>
<% } %>
</p>
<p>
<% culori = ["red","green","blue"]
var ind = Math.trunc(Math.random()*culori.length); %>
Culoarea este:
<span style='color:<%= culori[ind] %>'>
<% switch (ind){
case 0: %> rosie
<% break;
case 1:%> verde
<% break;
case 2:%> albastra
<% } %>
</span>
</p>
app.set('view engine', 'html');
ejs = require('ejs')
app.engine('.html', ejs.renderFile);
app.set('views', 'templateuri');
npm install cookie-parser --save
var cookieParser = require('cookie-parser');
app.use(cookieParser());
response.cookie(nume-cookie,valoare-cookie)
var date_user = {‘nume’:’Claudia’,’varsta’:33}
response.cookie(‘user’,date_user);
response.clearCookie(nume-cookie)
request.cookies
<html lang="us">
<body>
<p>limba selectata: <%= selectedLang %></p>
<form action="formpost" method="post">
<select name="limba">
<% langs.forEach(function(lang) {%>
<option <%= lang == selectedLang ? 'selected' : '' %>>
<%= lang %></option>
<% }); %>
</select>
<button type="submit">save</button>
</form>
</body>
</html>
// app.js
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
app.use(cookieParser());
app.set('view engine', 'ejs');
app.use('/formpost',express.urlencoded({extended:true}));
app.get('/form', function(req,res){
res.render('pagini/form',{selectedLang:req.cookies.limba,
langs : "['romana', 'franceza', 'greaca', 'spaniola']"});
});
app.post('/formpost', function(req,res){
res.cookie('limba', req.body.limba);
res.send('saved');
});
var events = require('events');
var eventEmitter = new events.EventEmitter();
eventEmitter.on('myevent', eventHandler);
eventEmitter.on('myevent', anotherEventHandler);
eventEmitter.emit('myevent',[argumente]);
eventEmitter.on('myevent',function(arg1,arg2){
for(let i = 0; i < arg1; i++)
console.log(arg2);});
eventEmitter.emit('myevent',10,'a');
npm install formidable --save
var formidable = require('formidable');
var form = new formidable.IncomingForm();
form.parse(req,function(err,fields,files){...});
var form = new formidable.IncomingForm
({uploadDir:'cale_director', keepExtensions:true})
form.on('fileBegin', function(name,file){
file.path = 'cale_director' + file.name;
// ca să păstrăm numele inițial al fișierului din file.name
}
const express = require('express');
const app = express();
const fs = require('fs');
const formidable = require('formidable');
app.use(express.static('html'));
app.post('/salveaza',function(req,res){
var ob;
if (fs.existsSync("pers.json")){
var date = fs.readFileSync("pers.json");
ob = JSON.parse(date);
}
else ob = [];
var form = new formidable.IncomingForm
({uploadDir:'upload', keepExtensions:true});
form.parse(req,function(err,fields,files){
var ob_form = {'nume':fields.nume,
'cv':files.cv.path,
'poza':files.poza.path};
ob.push(ob_form);
fs.writeFileSync("pers.json",JSON.stringify(ob));
});
res.send("salvat:");
});
npm install express-session –save
const session = require('express-session');
app.use(session({
secret: 'abcdefg', // pentru criptarea session ID-ului
resave: true, // să nu șteargă sesiunile idle
saveUninitialized: false
// nu salvează obiectul sesiune dacă nu am setat niciun câmp
}));
var express = require('express');
var app = express();
const session = require('express-session');
app.use(session({
secret: 'abcdefg',
resave: true,
saveUninitialized: false,
}));
app.get('/pagina1', function(req, res){
if(req.session.vizitat){
req.session.vizitat++;
}
else {
req.session.vizitat = 1;
}
res.send('Ești pe pagina 1');
console.log(req.session.vizitat);});
app.get('/pagina2', function(req, res){
res.send("Ai vizitat pagina 1 de " + req.session.vizitat + " ori");});
app.listen(4000);
<form method="post" action="login">
<label>
Username: <input type="text" name="username"
value="Claudia">
</label>
<label>
Parola: <input type="password" name="parola"
value="">
</label>
<input type="submit" value="Submit">
</form>
app.post('/login', function(req, res) {
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
user = verifica(fields.username, fields.parola);
// verificarea datelor de login
if(user){
req.session.username = user;
// setez userul ca proprietate a sesiunii
res.redirect('/logat'); }
else
req.session.username = false;
});
});
app.get('/logat', function(req, res) {
res.render('pagini/logout',{'nume':req.session.username});
});
app.get('/logout', function(req, res) {
req.session.destroy();
// distrugem sesiunea la intrarea pe pagina de logout
res.render('pagini/login');
});
/~\
(O O)
_\=/_ întrebări?
/ _ \
//|/.\|\\
|| \_/ ||
|| |\ /| ||
# \_ _/ #
| | |
| | |
[]|[]
| | |
/_] [_\