Node.js Accueil
Chapitres :
Node.js Chapitre 2
Utilisation des modules :
Dans l’exemple du chapitre précédent, nous avons déjà exploité un module, le module http.
Une foule d’autres modules sont disponibles en Node.js, et tout au long de ce cours, nous allons en utiliser plusieurs. Certains sont préinstallés par défaut, d’autres sont à installer au besoin.
2.1. Appeler un module préexistant
On va montrer comment exploiter un autre module préinstallé, tout comme nous l’avons fait avec le module http précédemment : le module url.
Le module url va nous permettre de filtrer l’adresse URL tapée dans le navigateur pour en extraire les routes, et/ou les paramètres.
Exemples : on veut paramétrer notre code Node.js pour réagir différemment selon l’URL tapée :
- http://localhost:8080/contact
- http://localhost:8080/archives/2012
- http://localhost:8080/recherche?nom=toto&prenom=titi
On pourra par exemple écrire :
var http = require('http');
var url = require('url'); // appel au module
var server = http.createServer(function(req, res) {
var page = url.parse(req.url, true).pathname;
console.log(page);
res.writeHead(200, {"Content-Type": "text/plain"});
if (page == '/') {
res.write('Bienvenue à l\'accueil, que puis-je pour vous ?');
}
else if (page == '/contact') {
res.write('Vous êtes dans la page de contacts.');
}
else if (page == '/archives/2012') {
res.write('Ici c’est la page des archives, année 2012');
}
res.end();
});
server.listen(8080);
Ici on remarquera qu’on teste la chaîne de caractères extraite de l’URL (nom de la page) pour remplir la page http de façon conditionnée (if, else if, etc…). On parle aussi de tests de route.
On peut rajouter au code précédent les lignes suivantes pour extraire les paramètres de l’URL :
var param = url.parse(req.url, true).query;
Pour bien comprendre ce qui se passe suite à la ligne précédente, je vous conseille de tester un console.log de la variable param, pour chacune des 4 URL listées ci-dessus. Suite à cela, on peut maintenant conditionner le contenu notre page :
else if (page == '/recherche' && param.nom) {
res.writeHead(200, {"Content-Type": "text/plain"});
res.end('Vous avez fait une recherche pour '+param.nom);
}
Pour davantage de détails, référez-vous au chapitre plus bas : 4.1.4, les paramètres de GET.
2.2. Installer un module externe et s'en servir
Node.js est « petit ». En effet, par défaut, il vient avec quelques modules, mais somme toute assez peu comparativement à la multitude de modules disponibles « en externe ». Ainsi, si l’on en éprouve le besoin relativement à un projet donné, on peut faire appel à un module externe. Ici je vais montrer l’exemple avec express.js, que nous apprendrons à utiliser ultérieurement (chapitre 4).
Le système de gestion de modules associé à Node.js s’appelle npm (acronyme de « Node Package Manager »), qui fonctionne un peu comme APT pour Linux ou PIP pour python. C’est-à-dire que directement depuis la console Node.js, on fait appel à npm pour installer un module dans le projet en cours. Il sera donc installé dans le dossier de votre projet, le dossier actuellement atif dans la console.
- Une fois dans le dossier du fichier Node.js à exploiter, dans la console Node.js, taper :
npm install express
- On remarque que dorénavant, un sous-dossier « node_modules » est apparu dans notre dossier de travail. Il contient le module installé ainsi que toutes ses dépendances.
- Maintenant, on peut faire appel à ce module nouvellement installé dans notre fichier Node.js:
var express = require('express');
D’autres commandes npm utiles à connaître (commandes console) :
npm search trucbidule
C’est la commande à utiliser pour faire une recherche de module en lien avec « trucbidule »
npm install monmodule -g
Cette option s’utilise pour installer un module globalement : il sera ainsi accessible à TOUS les fichiers js de mon ordi, mais les sources ne seront PAS dans les « node_modules » de chacun. ATTENTION on s’en sert donc rarement.
npm update
Cette commande s’utilise pour mettre à jour les dépendances du projet actuel : elle consulte un fichier « package.json » supposément présent initialement dans le dossier du projet, et installe et/ou met à jour chaque module qui y est listé.
npm init
En lançant cette commande, vous initialisez un nouveau projet node.js proprement. Le programme :
- Va vous demander le nom du projet
- Va vous demander le nom du fichier js principal ET LE CRÉER
- Va vous demander un numéro de version (facultatif)
- Va vous demander un nom d’auteur et un type de licence (facultatif)
- Et enfin va créer un fichier « package.json » pour y lister les futures dépendances
Si le dossier en cours contient déjà un projet actif (avec son « package.json »), la commande mettra à jour le « package.json » avec les dépendances utilisées par votre fichier js
npm install monmodule --save
Utilisez cette commande pour installer un nouveau module localement ET le rajouter dans la liste des dépendances de votre « package.json » si ce fichier est déjà existant. IMPORTANT : NOTER LE DOUBLE TIRET.
2.3. Créer son module
Imaginons que nous voulons structurer un projet en différents modules donc en utilisant plusieurs fichiers js. Nous devons pour cela apprendre à créer un module (une bibliothèque, ou librairie en Node.js), et l’appeler depuis le fichier principal.
Exemple : on veut créer un module cercle.js qui contiendra les fonctions de calcul de l’aire et de circonférence d’un cercle. Puis on va appeler ce module depuis un module principal.
Dans mon fichier cercle.js :
const PI = 3.14159;
exports.aire = (r) => PI * r * r;
exports.circonference = (r) => 2 * PI * r;
Dans mon fichier test.js :
const moncercle = require('./cercle.js'); //appel de module
console.log('L\'aire d\'un cercle de rayon 4 est ${moncercle.aire(4)}'); // appel de fonction du module
console.log("La circonference d'un cercle de rayon 4 est "+moncercle.circonference(4)); // idem
On remarque plusieurs choses :
- Le fichier utilisé comme bibliothèque doit mettre à disposition une ou des fonctions (méthodes) en utilisant « exports ».
- Le fichier qui exploite la bibliothèque fait un « require » avec « ./ » pour désigner l’emplacement du fichier à appeler (ici les deux fichiers sont dans le même dossier).
- le « require » est assigné à une constante (ou une
variable) dont on pourra ensuite appeler les méthodes comme membre (ici les
fonctions « aire » et « circonference »).