Node.JS
On this page… (hide)
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
- Remarquez l’utilisation de la commande npm. Cet outil sera régulièrement utilisé en ligne de commande. Vous trouvez ici la liste des commandes possibles.
- La commande npm init -y génère un fichier JSON contenant des valeurs par défaut.
- La commande npm install express ajoute le package express à votre application.
- Remarque : la commande npm install sans précision du package permet d’installer l’ensemble des packages qui apparaissent dans l’entrée dependencies du fichier package.json.
1.2 Le fichier server.js
const express = require('express');
const app = express();
const port = process.env.PORT || 8000;
app.get('/', (req, res) => {
});
app.listen(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 :
- La commande res.set permet de fixer la valeur d’un champ de l’entête HTTP transmis au client.
- La commande res.send permet de transmettre une réponse au client.
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 :
- le verbe, encore appelé méthode. Ici notre client n’utilisera que les verbes suivants :
- POST : pour envoyer des données au serveur.
- PUT/PATCH : pour modifier ou remplacer des données stockées sur le serveur.
- GET : pour obtenir des données du serveur.
- DELETE : pour supprimer des données stockées sur le serveur.
- l’URI
- identifie le serveur en précisant le domaine.
- indique le port utilisé : 80 par défaut.
- précise la méthode utilisée : GET par défaut.
- donne le chemin associé au verbe : / par défaut. Exemples
- L’URL “http://localhost:8000” définit une requête GET. localhost est le domaine, :8000 donne le port utilisé. Aucune autre information n’étant spécifiée, le chemin par défaut est /.
- L’URL “http://localhost:8000/xx” transmet une requête GET avec le chemin /xx.
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({
}));
app.use(router); // Requests processing will be defined in the file router app.listen(port, () => console.log('Server app listening on port ' + port));
Explications :
- Le package morgan permet de définir les informations que le serveur affiche dans la console à chaque fois qu’il reçoit une requête HTTP. Ce package est particulièrement utile en phase de développement de votre serveur.
- Le package cors permet de configurer comment des applications web définies sur un autre domaine peuvent accéder aux ressources de votre serveur. Ce mécanisme est appelé CORS pour Cross-Origin Resource Sharing, d’où le nom de ce package. Faire appel à ce package sans lui passer d’arguments permet d’autoriser tous les accès à votre ressource. Pour des exemples d’utilisation plus élaborés, vous pouvez consulter cette page.
- Le package body-parser permet de décomposer les requêtes HTTP POST, PATCH, etc. afin de pouvoir extraire les infoirmations tranmises dans des formulaires. Ces informations apparaissent dans le champ req.body.
- L’instruction app.use(router) permet de définir les routes dans le fichier router.js.
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
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
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.
