Il existe beaucoup de tutoriaux qui décrivent l'installation de nodeJS sur les plateformes « classiques » (GNU/linux, windows ou encore Mac OS). Je vous propose le tutoriel de Mathieu Nebra sur le site OpenClassrooms : https://openclassrooms.com/courses/des-applications-ultra-rapides-avec-node-js/installer-node-js

À faire vous-même 1.1

Une fois l'installation terminée, ouvrez une console (aussi appelé terminal) et tapez « node -v ». Si votre installation s’est bien passée, vous devriez voir la version de nodeJS s'afficher dans la console.


Nous allons écrire notre premier programme avec nodeJS. Vous allez créer un dossier nommé "express" dans votre dossier de travail et créez un fichier JavaScript vierge, vous nommerez ce fichier "serveur.js".

Il existe de nombreux modules « livrés » d'office avec nodeJS, parmi ceci, nous allons utiliser le module http.

À faire vous-même 1.2

Saisissez le code suivant dans le fichier que vous venez de créer.


var http = require('http');
var serveur = http.createServer(function(req, res) {
 res.writeHead(200, {"Content-Type": "text/html"});
 res.write('<!doctype html>'
 +'<html lang="fr">'
 +'<head>'
 +'<meta charset="utf-8">'
 +'<title>nodeJS</title>'
 +'</head>'
 +'<body>'
 +'<h1>Hello World! Ceci est un titre</h1>'
 +'<p>Ceci est un <strong>paragraphe</strong>.</p>'
 +'</body>'
 +'</html>');
 res.end();
});
serveur.listen(8080);
			

En utilisant la console, placez-vous dans le dossier qui accueille le fichier serveur.js en utilisant la commande cd. Entrez dans la console :


node serveur.js
			

Sans fermer la console, ouvrez un navigateur web, dans la barre d'adresse, tapez : "localhost:8080". Normalement, notre page web devrait s'afficher.


Quelques explications s'imposent :

La consultation d'un site internet est un échange de données entre 2 ordinateurs distants (un client et un serveur), or, ici, nous n'utilisons qu'un ordinateur ? Dans toute la phase de développement, il est tout à fait possible de n'utiliser qu'un seul ordinateur qui jouera à la fois (et en même temps) le rôle du client et le rôle serveur.

L'exécution, dans la console, de la commande node serveur.js "démarre" le serveur, une fois le serveur démarré, il "attend" les requêtes HTTP en provenance d'un client. Le navigateur web va envoyer ces requêtes au serveur.

Mais comment entrer en communication avec le serveur ?

il suffit d'utiliser une adresse un peu spéciale : localhost (localhost indique au navigateur web que le serveur se trouve sur la même machine que lui).

Le : 8080 définie le port utilisé par le serveur. Plusieurs applications peuvent utiliser la même connexion réseau à condition de ne pas utiliser le même port (on parle aussi de socket). Ici notre serveur "écoute" et "attend" une requête HTTP sur le port 8080 ( nous aurions pu en choisir un autre).

Passons maintenant à l'étude du code :


var http = require('http');
			

nodeJS possède de nombreux modules afin d'étendre ces possibilités de bases. Nous utilisons ici le module http qui permet de traiter des requêtes HTTP (et donc de développer un serveur web). Nous créons un objet (au sens programmation orientée objet, avec donc des attributs et des méthodes) que l'on nomme tout simplement http (nous aurions pu prendre un autre nom) à l'aide de l'instruction « require ».

La deuxième ligne est très longue, nous allons la décortiquer : 


var serveur = http.createServer(...
			

nous créons un objet dénommé "serveur". Pour créer cet objet, nous utilisons une méthode de l'objet http : createServer. La méthode createServer accepte un paramètre : une fonction anonyme. Quel est le rôle de cette fonction anonyme ?

Nous rentrons ici dans le cœur de ce qui fait nodeJS : les callbacks

La programmation sous nodeJS est un peu particulière, tout est une question d’événement. La fonction anonyme passée en paramètre de la méthode createServer sera exécutée à chaque fois que le serveur recevra une requête HTTP venant de l'extérieur, le reste du temps, notre programme passera son temps à attendre. Cette fonction anonyme est un "callback" de l'événement requête HTTP.

Étudions maintenant cette fonction de callback :


function(req, res) {
 res.writeHead(200, {"Content-Type": "text/html"});
 res.write('<!doctype html>'
 +'<html lang="fr">'
 +'<head>'
 +'<meta Charest="utf-8">'
 +'<title>nodeJS</title>'
 +'</head>'
 +'<body>'
 +'<h1>Hello World! Ceci est un titre</h1>'
 +'<p>Ceci est un <strong>paragraphe</strong>.</p>'
 +'</body>'
 +'</html>');
 res.end() ;
}
			

La fonction de callback prend deux paramètres : req (pour request) et res (pour response (réponse en anglais)). req et res sont tous les deux des objets, req va nous permettre de manipuler tout ce qui touche à la requête HTTP reçue par le serveur alors que res permettra de manipuler tout ce qui touche à la réponse du serveur (il est tout à fait possible de choisir d'autres noms : le premier paramètre concernera la requête et le second la réponse).


res.writeHead(200, {"Content-Type": "text/html"});
			

permet de "remplir" l'en-tête de la réponse HTTP avec le code de retour 200 ("Tout c'est bien passé") et avec le type de document renvoyé (du HTML).


res.write('<!doctype html>'
+'<html lang="fr">'
+'<head>'
+'<meta Charest="utf-8">'
+'<title>nodeJS</title>'
+'</head>'
+'<body>'
+'<h1>Hello World! Ceci est un titre</h1>'
+'<p>Ceci est un <strong>paragraphe</strong>.</p>'
+'</body>'
+'</html>');
			

res.write permet de remplir le corps de la réponse HTTP : nous renvoyons une chaine de caractère (concaténation de plusieurs chaines de caractères) correspondant à du code HTML. J'ai placé les différentes balises les unes sous les autres afin de faciliter la lecture, sachez qu'il aurait été possible d'avoir :


'<!doctype html><html lang="fr"><head>....</html>'
			

C'est moins lisible, mais cela évite les concaténations.


res.end();
			

permet de terminer notre réponse HTTP avant son envoi vers le client.

Cette notion de fonction de callback est fondamentale pour la suite, si vous avez du mal, n'hésitez pas à poser des questions avant d'aller plus loin.

Il nous reste une dernière ligne à étudier :


serveur.listen(8080);
			

On applique la méthode listen à l'objet «serveur» (objet qui a été créé à l'aide de la méthode createServer), cette méthode « met en route le serveur » et lui indique le port sur lequel il doit « écouter » afin de recevoir les requêtes HTTP.

Cet exemple fonctionne, mais il peut satisfaisant ! Allons-nous nous amuser à mettre du code HTML dans notre fichier JavaScript ? Bien sûr que non, pour faciliter les choses, nous allons utiliser, dans la prochaine activité, un framework de nodeJS : express.