Node.js est un environnement bas niveau permettant l’exécution de JavaScript côté serveur. C’est un langage événementiel, il n’y a qu’une tâche dans un programme (Thread). Un programme node.js peut contenir beaucoup d’opérations, mais aucune d’elle n’est bloquante.
Installation :
Windows : https://nodejs.org/en/
Ubuntu : https://www.cyberpratibha.com/install-node-js-in-ubuntu/
sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash
sudo apt-get install -y nodejs
Généralités :
a) Une variable se déclare avec l’instruction ‘var’. On lui affecte une valeur grâce à l’opérateur ‘=’. Sa portée est globale dans tout le code. Utilisez ‘const’ si la valeur ne doit pas être changée et/ou affectée à différente valeur dans le code (exemple const a=1; puis a=2;). Enfin utilisez le mot clef ‘let‘ pour définir une variable qui aura la portée de la fonction ou de la zone de code (bloc (if..)) où elle a été déclarée.
Les variables, const et let peuvent être de type
a =true;//booléen a =1;//entier a =1.1;//flottant a ="Hello";//chaînedecaractères a ='Hello';//idem
Mais aussi de type tableau
var t = [ 1, true, 'Hello' ]; var u = t[0]; // u = 1
Ou de type objet
var o = { prop1: 'Hello', prop2: 'World!' }; var v = o['prop1']; // les deux lignes sont var v = o.prop1; // équivalentes
b) Les fonctions sont un type de variable
var f =
function
(
i) {
return i +
1
;
}
;
est identique à
function f
(
) {
return i +
1
;
}
un objet ou un tableau peut contenir une fonction
var o = { f: function(i) { return i + 1; } }; var a =o.f(1); // a = 2
Node.js permet d’utiliser des outils tiers appelés modules. Il inclut de nombreux modules de base, exemple xxx. Par la fonction require, nous demandons à Node.js d’inclure le module xxx, et nous décidons d’accéder à ses méthodes via un objet xxx.
Les événements :
Pour écouter des événements il faut connaitre quels événements existent pour le module choisi. Par exemple pour le module ‘http’
omment écouter ces évènements ? Supposons par exemple qu’on souhaite écouter l’évènement « close » qui survient quand le serveur est arrêté. Il suffit de faire appel à la méthode on()
et d’indiquer :
-
Le nom de l’évènement que vous écoutez (ici « close »)
-
La fonction de callback à appeler quand l’évènement survient
Exemple :
server.on(‘close’, function() {
// Faire quelque chose quand le serveur est arrêté
})
Il est aussi possible d’émettre des événements : inclure le module EventEmitter et créez un objet basé sur EventEmitter :
var EventEmitter = require(‘events’).EventEmitter;
var jeu = new EventEmitter();
Pour émettre un événement, il suffit de faire appel à emit()
depuis l’objet basé sur EventEmitter.
jeu.emit(‘gameover’, ‘Vous avez perdu !’);
jeu.on(‘gameover’, function(message) { });
var EventEmitter = require(‘events’).EventEmitter;
var jeu = new EventEmitter();
jeu.on(‘gameover’, function(message){
console.log(message);
});
jeu.emit(‘gameover’, ‘Vous avez perdu !’);
Serveur web :
Pour créer un serveur web il suffit d’écrire :
const {createServer} = require(‘http’);
const server = createServer((request, response) => {
response.writeHead(200, {‘Content-Type’: ‘text/plain’});
response.end(‘Hello World\n’);
});server.listen(3000, () => console.log(`Adresse du serveur : http://localhost:3000`));
Sauvegardez ce code dans un fichier serveur.js puis exécutez le en tapant node serveur.js puis ouvrez votre navigateur et entrez http://localhost:3000/ pour voir le résultat !
Une autre manière d’écrire ce code :
var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); }).listen(3000);
On peut changer aussi l’adresse ip :
listen
(
3000
,
'
127
.
0
.
0
.
1
'
)
Pour récupérer du code JSON (exemple le nom de la ville du navigateur qui se connecte via l’url : https://geoip-db.com/json/)
const https = require(‘https’);
https.get(‘https://geoip-db.com/json/’, (resp) => {
let data = « »;
// A chunk of data has been recieved.
resp.on(‘data’, (chunk) => {
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on(‘end’, () => {
console.log(JSON.parse(data).city);});
}).on(« error », (err) => {
console.log(« Error: » + err.message);
});
EndPoints :
Permet de créer des WebServices :
exports.endpoint = function(request, response) {
response.end(« Hello world! »);
}
Donne : https://testendpoind-bm9nj7q0d0gu.runkit.sh/
Pour récupérer le résultat d’un appel à une adresse HTTPs :
const https = require(« https »);
///////////////////////////////
var query = « FeteDateLast.php?cmd=demain »;
httpGet(query, (theResult) => {
console.log(« sent : » + query);
console.log(« received : » + theResult);
const theFact = theResult;const speechOutput = theFact;
});
/////////////////////////function httpGet(query, callback) {
https.get(« https://site.com/ ».query, (resp) => {
let data = « »;
// A chunk of data has been recieved.
resp.on(« data », (chunk) => {
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on(« end », () => {
//console.log(JSON.parse(data).mainText);
callback(JSON.parse(data).mainText);
});
}).on( » error « , (err) => {
callback(« Error: » + err.message);
});}
Astuces :
str.trim()
function test(t) {
if (t === undefined) {
return ‘Undefined value!’;
}
return t;
}
let x;
console.log(test(x));
// expected output: « Undefined value! »
Tools :
https://runkit.com : Emulateur OnLine permet de sauvegarder le code sur GitHub
EXPRESS :
https://engineering.paiza.io/entry/paizacloud_online_multiplayer_game
Références :
https://nodejs.developpez.com/tutoriels/javascript/redecouvrir-javascript-avec-nodejs/
http://putaindecode.io/fr/articles/js/es2015/const-let-var/
https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html
https://codeburst.io/three-awesome-courses-for-learning-node-js-d7f761437101