Wiki Informatique - Node.JS

Node.JS

node.js est une plateforme logicielle (runtime environment) construite sur l’interpréteur JavaScript V8.

  • Elle respecte les spécification ECMAScript.
  • Elle permet d’exécuter du code JavaScript, mais aussi de bâtir facilement un serveur web, grâce à une bibliothèque intégrée : HTTP.

1.  Créer un serveur rapidement avec Express

Express.js est un framework minimaliste pour node.js. Il permet de créer facilement une application web. Son côté minimaliste le rend peu pratique pour créer des application de taille un importante. Il permet d’accélérer le développement d’un serveur node.js. En offrant de nombreuses de fonctionnalités, il simplifie ainsi l’écriture du serveur. En particulier, il permet de gérer aisément le routage et offre de nombreuses fonctionnalités supplémentaires à l’objet HTTP utilisé avec node.js.

1.1  Fichiers & répertoires utiles

mkdir server
cd server
npm init -y
npm install express
touch server.js

1.2  Le fichier server.js

const express = require('express');
const app = express();
const port = process.env.PORT || 8000;

app.get('/', (req, res) => {

res.set('Content-Type', 'text/html');
res.send('Hello world !!');

});

app.listen(port, () => {

console.log('Server app listening on port ' + port);

});

Lancez le serveur :

node server.js

Entrez l’URL “http://localhost:8000” dans votre navigateur web

Le message “Hello world!!” apparait : votre serveur fonctionne.

Commentaires :

Essayez l’URL suivante : “http://localhost:8000/xx”, le message “cannot GET /xx” apparaît, indicant que votre serveur ne reconnait pas votre requête.

1.3  HTTP

Le protocole HTTP définit le mode de communication entre le client (votre navigateur) et le serveur (votre application Express). Il définit le format des requêtes pouvant être émises par le client. Elles peuvent être décomposées en deux éléments :

1.4  Amélioration du serveur

1 Arrêtez votre application (ctrl-C).

2 Installez de nouveaux packages npm

Saisissez la commande suivante :

npm install cors morgan nodemon.

3 Créez le fichier router.js.

4 Modifiez le fichier server.js.

const express = require("express"); const router = require('./router');

const cors = require('cors'); const morgan = require('morgan'); const bodyParser = require("body-parser"); const app = express();

const port = process.env.PORT || 8000;

app.use(morgan('combined')); app.use(cors()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({

extended: true

}));

app.use(router); // Requests processing will be defined in the file router app.listen(port, () => console.log('Server app listening on port ' + port));

Explications :

5. Modifiez package.json.

Modifiez l’entrée scripts de votre fichier package.json comme suit :

"scripts": { ->"start": "nodemon server.js", }

Saisissez la commande

npm start.

Ceci déclenche la commande nodemon server.js. Nodemon est un utilitaire qui relance le serveur à chaque modification.

6 Modifiez le fichier router.js.

Avant de relancer votre serveur, il vous faut définir votre router. Recopiez le code suivant dans votre fichier router.js :

const express = require("express");
const router = express.Router();

module.exports = router;

7 Relancez le serveur

Relancez votre serveur. Remarquez que la requête “http://localhost:8000” reçoit un message d’erreur.

8 Saisissez votre première méthode dans le fichier router.js:

router

.get("/", (req, res) => {
res.json("Hello world!!");
});

Ce code se compose de plusieurs parties qu’il convient de bien comprendre :

  • .get est une méthode de l’objet router qui permet de répondre aux requêtes GET. Comme les autres méthode permettant de répondre aux différentes requêtes (POST,PUT, …), cette méthode comprend deux arguments.
  • "/" est le premier argument de la méthode router.get, il définit le chemin auquelle le routeur réagit.
  • (req,res) => {...} est le deuxième argument. Il donne la fonction middleware qui sera déclenchée par le routeur lorsque qu’une requête HTTP constituée de la bonne méthode et du bon chemin sera envoyée au serveur. Cette fonction middleware comprend deux arguments :
    • req : un objet Javascript qui contient les informations sur la requête envoyée par le client.
    • res : un objet JavaScript qui contient les informations retournées au client par le serveur. Vous pouvez maintenant définir successivement l’ensemble des requêtes auxquelles votre serveur doit savoir répondre. Attention, si plusieurs méthodes répondent à la même requête, seule la première sera exécutée.
  • Enfin, la méthode res.json permet de retourner des données au format JSON

9 Ajout d’une méthode

Remarquez que la requête “http://localhost:8000/xx” reçoit encore un message d’erreur. Ajoutez la méthode suivante au routeur afin que celui-ci retourne le statut HTTP approprié au client :

router

.use((req, res) => {
res.status(404);
res.json({
error: "Page not found"
});
});

Le terme use signifie que la fonction middleware est exécutée quelque soit la méthode HTTP utilisée. Ici, le premier argument (le chemin) n’est pas précisé . En conséquence, cette méthode sera exécutée systématiquement lorsqu’elle sera atteinte. Elle doit donc être la dernière de la liste : si aucune méthode du routeur n’a déclenché sa fonction middleware, alors le routeur retourne le message “Not found” avec un statut d’erreur 404.

Le serveur doit respecter les codes de réponse HTTP, ce qui permet au client de réagir correctement en fonction du code qu’il reçoit.