Chapitre 1 2
Chapitre 1 2
Chapitre 1 2
Objectifs :
Découvrir et comprendre le fonctionnement de Node.js
Installer et configurer un serveur Node.js
Prérequis : Avant d'entamer cette séquence, vous avez besoins d’une connaissance préalable
en JavaScript et en HTML
1. Historique
Node.js est une plateforme logicielle libre et événementielle en JavaScript orientée vers les
applications réseau qui doivent pouvoir monter en charge.
Elle utilise la machine virtuelle V8 et implémente sous licence MIT les spécifications
CommonJS.
Parmi les modules natifs de Node.js, on retrouve http qui permet le développement de serveur
HTTP. Il est donc possible de se passer de serveurs web tels que Nginx ou Apache lors du
déploiement de sites et d'applications web développés avec Node.js.
Concrètement, Node.js est un environnement bas niveau permettant l’exécution de JavaScript
côté serveur.
Node.js est utilisé notamment comme plateforme de serveur Web, elle est utilisée par Groupon,
Vivaldi, SAP, LinkedIn, Microsoft, Yahoo!, Walmart, Rakuten, Sage et PayPal.
Node.js est une plateforme logicielle libre en JavaScript intégrant un serveur HTTP. Son
fonctionnement est basé sur une boucle événementielle lui permettant de supporter de fortes
montées en charge.
L’utilisation de Node.js en tant que serveur web permet de traiter un gros volume de requêtes
simultanément de manière efficace. Cette performance élevée s’explique par une conception
asynchrone (modèle non bloquant) permettant d’éviter les attentes. Ainsi, plusieurs requêtes
peuvent être lancées en parallèle. Les résultats sont traités au fil de l'eau.
Node utilise le compilateur JavaScript V8 de Google focalisé sur les performances et la sécurité.
A l'origine, la machine virtuelle V8 a été créée pour interpréter le JavaScript dans le navigateur
Chrome. Le moteur V8 est et restera à la pointe de la technologie. Par ricochet, les progrès de
V8 impactent directement Node.js.
NB : NodeJS n'est pas un framework. Ce n'est pas un outil qui vous permettra de mettre en
place une application web rapidement avec peu de code. C'est un outil plus bas niveau qui vous
permettra de communiquer avec le système à travers différentes librairies C++ et avec un
langage familier. Comme vu précédemment, c'est un outil que l'on va sélectionner si on a besoin
de gérer un grand nombre de demandes sur un seul thread en évitant les lenteurs dû à la nature
synchrone d'autres langages.
3. Installation de NodeJS
Depuis la page de téléchargement, vous devriez voir un bouton « Windows installer » (si vous
êtes sur Windows). Cliquez dessus pour télécharger automatiquement le zip le plus adapté à
votre système. Vous pouvez également choisir vous même votre zip dans Download pour
obtenir au choix le Windows Installer (.msi) et/ou le Windows Binary (.exe) en 32/64 bit.
3.2. Intaller node et npm
Cliquez sur suivant puis acceptez la licence et déposez-le dans "Program files".
L'exécuteur node.js : le programme permettant d'exécuter des fichiers .js (comme php.exe le
ferait avec des .php).
Le module npm (Node Package Manager) : un gestionnaire de modules qui va vous permettre
simplement d'ajouter et retirer les librairies dont vous aurez besoin pour vos applications (pas
de surplus, seulement le nécessaire donc).
Des variables d'environnements : Ainsi vous pourrez exécuter les commandes node et npm
dans votre invité de commande.
Quand l'installeur aura fini vous aurez un joli dossier contenant entre autre node.js et npm.cmd
qui seront appelables depuis n'importe quel dossier avec les commandes node et npm.
Ile programme suivant crée un mini-serveur web qui renvoie un message "Salut tout le monde"
dans tous les cas, quelle que soit la page demandée. Ce serveur est lancé sur le port 8080 à la
dernière ligne.
Décomposition du code :
require effectue un appel à une bibliothèque de Node.js, ici la bibliothèque "http" qui nous
permet de créer un serveur web. Il existe des tonnes de bibliothèques comme celle-là, la plupart
pouvant être téléchargées avec NPM, le gestionnaire de paquets de Node.js.
La variable http représente un objet JavaScript qui va nous permettre de lancer un serveur web.
C'est justement ce qu'on fait avec :
Dans Node.js Il y a des fonctions de callback de partout, et en général elles sont placées à
l'intérieur des arguments d'une autre fonction comme le code ci-dessus.
N'oubliez pas de bien fermer la fonction de callback avec une accolade, puis de fermer les
parenthèses d'appel de la fonction qui l'englobe, puis de placer le point-virgule. C'est pour ça
que vous voyez les symboles});à la dernière ligne du code.
La fonction de callback est donc appelée à chaque fois qu'un visiteur se connecte à notre site.
Elle prend 2 paramètres :
La requête du visiteur (reqdans mes exemples) : cet objet contient toutes les
informations sur ce que le visiteur a demandé. On y trouve le nom de la page appelée,
les paramètres, les éventuels champs de formulaires remplis...
La réponse que vous devez renvoyer (resdans mes exemples) : c'est cet objet qu'il
faut remplir pour donner un retour au visiteur. Au final, res contiendra en général le
code HTML de la page à renvoyer au visiteur.
res.writeHead(200);
res.end('Salut tout le monde !');
On renvoie le code 200 dans l'en-tête de la réponse, qui signifie au navigateur "OK tout va
bien" (on aurait par exemple répondu 404 si la page demandée n'existait pas). Il faut savoir
qu'en plus du code HTML, le serveur renvoie en général tout un tas de paramètres en en-
tête. Il faut connaître la norme HTTP qui indique comment clients et serveurs doivent
communiquer pour bien l'utiliser. Ce qui est dûe au fait que Node.js est bas niveau.
Enfin, le serveur est lancé et "écoute" sur le port 8080 avec l'instruction :
server.listen(8080);
NB : On évite d'utiliser ici le port 80 qui est normalement réservé aux serveurs web, car celui-
ci est peut-être déjà utilisé par votre machine. Ce port 8080 sert juste pour nos tests évidemment,
une fois en production il est conseillé au contraire d'écouter cette fois sur le port 80 car c'est à
cette porte (à ce port) que vos visiteurs iront taper en arrivant sur votre serveur.
Pour tester votre premier serveur, rendez-vous dans la console et tapez puis allez dans le
répertoire ou se trouve votre projet(« hello-world.js ») .
node hello-word.js
La norme HTTP dit que le serveur doit indiquer le type de données qu'il s'apprête à envoyer
au client. Un serveur peut renvoyer différents types de données :
Ce sont ce qu'on appelle les types MIME. Ils sont envoyés dans l'en-tête de la réponse du
serveur.
Dans notre premiere application Nous avons seulement indiqué le code de réponse 200 qui
signifie "OK, pas d'erreur". Nous devons rajouter un paramètre qui indique le type MIME de la
réponse. Pour HTML, ce sera donc :
Jusqu'ici, nous avions toujours écrit le code HTML dansres.end(). Pour mieux découper le code,
on utilise la commande res.write() qui permet d'écrire la réponse en plusieurs temps. Ca revient
au même, mais notre code est mieux découplé comme ça.
res.end() doit toujours être appelé en dernier pour terminer la réponse et faire en sorte que le
serveur envoie le résultat au client.
Il existe des moyens de séparer le code HTML du code JavaScript : ce sont les systèmes de
templates.
Pour récupérer la page demandée par le visiteur, on va faire appel à un nouveau module de
Node appelé "url". On demande son inclusion avec :
Ensuite, il nous suffit de "parser" la requête du visiteur comme ceci pour obtenir le nom de la
page demandée :
url.parse(req.url).pathname;
/accueil
Maintenant pour envoyé un résultat en fonction de la page qui est demandée, il suffit juste
d'utiliser une condition comme le montre l'exemple suivant :
var http = require('http');
var url = require('url');
Les paramètres sont envoyés à la fin de l'URL, après le chemin du fichier. Prenez cette URL
par exemple :
http://localhost:8080/page?prenom=Robert&nom=Dupont
var params=url.parse(req.url).query
Le problème, c'est qu'on vous renvoie toute la chaîne sans découper au préalable les différents
paramètres. Heureusement, il existe un module Node.js qui s'en charge pour nous :
querystring.
Vous disposerez alors d'un tableau de paramètres "params". Pour récupérer le paramètre
"prenom" par exemple, il suffira d'écrire :params['prenom']
Références
https://www.grafikart.fr/formations/nodejs/nodejs-intro
https://makina-corpus.com/blog/metier/2014/introduction-a-nodejs
https://blog.lesieur.name/installer-et-utiliser-nodejs-sous-windows/
http://wdi.supelec.fr/appliouaibe/Cours/JSserveur