À faire vous-même 3.1

Faites un copier-coller du dossier "express_00" et renommez-le en "express_a3_1" (Je ne préciserai plus cette opération par la suite, vous devrez la faire systématiquement quand je vous demanderai de "Créez une nouvelle application").

Complétez les fichiers avec le code suivant :

serveur.js


var express = require('express');
var app = express();
app.get('/', function (req, res) {
 res.sendFile(__dirname + '/html/index.html');
});
app.listen(8080);
			

index.html


<!doctype html>
<html lang="fr">
<head>
 <meta charset="utf-8">
 <title>Voici mon site</title>
</head>
<body>
 <h1>Hello World! Ceci est un titre</h1>
 <p>Ceci est un <strong>paragraphe</strong></p>
</body>
</html>
			

Ouvrez une console et placez-vous dans le dossier "express_a3_1". Lancez le serveur en tapant dans la console :


node serveur.js
			

Ouvrez un navigateur et tapez dans la barre d'adresse : http://localhost:8080

La page devrait s'afficher dans le navigateur


Analyse du fichier serveur.js :


var express = require('express');
			

Nous commençons par « importer » le module express (indispensable à partir du moment où vous voulez utiliser express)


var app = express();
			

Nous créons un objet « générique » qui nous permettra de manipuler tous les outils fournis par express.


app.get('/', function (req, res) {
 res.sendFile(__dirname + '/html/index.html');
});
			

Cette ligne est fondamentale :

Nous utilisons la méthode get de l'objet app. Cette méthode est très importante puisque c'est elle qui va permettre à notre serveur de répondre aux requêtes HTTP de type GET (ne pas hésiter à revoir le document sur les requêtes HTTP : ici).

Cette méthode accepte deux paramètres : '/' et une fonction anonyme.

Quand vous écrivez l'adresse d'un site, on peut distinguer 3 parties : http://www.monsite.fr/mondossier/

Le premier paramètre de la méthode get correspond à la partie "chemin (URL)"

Sur notre machine de « test» (client et serveur sur un même ordinateur), la fonction anonyme (2e paramètre de la méthode get) sera exécutée quand l'adresse suivante : http://localhost:8080/ (le / final n'étant pas obligatoire, cela revient à écrire : http://localhost:8080)

Attention : Avec express, cette URL (1er paramètre de la méthode GET) n'a pas besoin de correspondre à l'emplacement réel de la ressource sur le serveur. Si je reprends l'exemple ci-dessus (http://www.monsite.fr/mondossier/), il se peut tout à fait que le dossier mondossier n'existe pas réellement sur le serveur. Nous verrons un peu plus loin l’intérêt de ces URL "fantômes" (avec la technique REST).

Étudions maintenant la fonction anonyme :


function (req, res) {
 res.sendfile(__dirname + '/html/index.html');
}
			

Comme avec le module http vu plus haut, nous avons ici affaire en une fonction callback ayant 2 paramètres : req et res (exactement la même signification que dans l'exemple du "À faire vous-même 1.2").

Nous utilisons la méthode sendFile de l'objet res, qui, comme son nom l'indique permet de renvoyer le contenu d'un fichier dans le corps de la réponse HTTP. Cette méthode a pour paramètre le chemin du fichier à renvoyer.

Comme vous pouvez le constater, nous utilisons la variable __dirname qui contient le chemin absolu du dossier courant (dossier contenant le fichier serveur.js). En fonction de la machine, ce chemin absolu vers le dossier courant sera différent, d'où l’intérêt de __dirname.

Avec "__dirname + '/html/index.html'", nous avons donc une concaténation entre le chemin absolu et le chemin du fichier à envoyer. C'est un peu compliqué, donc voici un exemple :

Sur ma machine, le chemin absolu menant au fichier index.html est : /home/lycee/nodejs/express_a3_1/html/index.html. Le dossier "express_a3_1" contient aussi le fichier serveur.js, le chemin absolu menant au fichier serveur.js est donc : /home/lycee/nodejs/express_a3_1. Nous avons donc __dirname='/home/lycee/nodejs/express_a3_1'.

En faisant la concaténation «__dirname +'/html/index.html'», j'obtiens bien le chemin absolu du fichier index.html.

Imaginons maintenant que je copie le dossier nodejs (et son contenu) sur une autre machine. Sur cette autre machine, le chemin absolu qui mène au fichier serveur.js est : /siteinternet/apprendrenodejs/nodejs/express_a3_1, nous avons donc __dirname='/siteinternet/apprendrenodejs/nodejs/express_a3_1'. La concaténation «__dirname +'/html/index.html'» nous permet donc bien de retrouver le chemin absolu du fichier index.html sur cette nouvelle machine. Le changement de machine ne nécessite pas de modification du code.

La dernière ligne :


app.listen(8080);
			

ne devrait pas vous poser de problème si vous avez bien compris l'exemple du "À faire vous-même 1.2").

À faire vous-même 3.2

Créez une nouvelle application

Soit le fichier html suivant :

maPage.html


<!doctype html>
<html lang="fr">
<head>
 <meta charset="utf-8">
 <title>Ma Page</title>
</head>
<body>
 <h1>Ceci est ma Page</h1>
</body>
</html>
			

Votre application devra renvoyer au client le contenu de la page html "maPage.html" quand l'utilisateur saisira l'url "http://localhost:8080/coucou" dans la barre de son navigateur (le système gérant le contenu du fichier "index.html" devra rester inchangé).