I Les principaux modules présents
Nodes.js comprend plus de 40 modules intégrés qui sont les suivants :
Assertion testing | Async hooks | Buffer | C++ addons |
C/C++ addons with N-API | Child processes | Cluster | Command line options |
Console | Crypto | Debugger | DNS |
Domain | ECMAScript modules | Errors | Events |
File system | Globals | HTTP | HTTP/2 |
HTTPS | Inspector | Internationalization | Modules |
Net | OS | Path | Performance hooks |
Policies | Process | Punycode | Query strings |
Readline | REPL | Report | Stream |
String decoder | Timers | TLS/SSL | Trace events |
TTY | UDP/datagram | URL | Utilities |
V8 | VM | WASI | Worker threads |
Zlib |
Certains modules sont globaux et d’autres nécessitent une déclaration (require). La documentation est directement accessible sur le site de Node.js.
Pour commencer il est nécessaire de se pencher sur les modules suivants :
- http ;
- url ;
- file system ;
- console.
Ensuite, et en fonction des besoins, voir les autres avant d’en télécharger sur npm par exemple.
II Module Http
Liens utiles pour commencer :
- Vidéo du site grafikart : https://www.grafikart.fr/tutoriels/http-795
- Site openclassroom : https://openclassrooms.com/fr/courses/1056721-des-applications-ultra-rapides-avec-node-js/1057142-une-premiere-application-avec-node-js
Exemple d’une page simple :
var http = require('http');
var server = http.createServer(function(req, res) {
console.log ("page accueil")
// prépare le header : réponse ok (code 200) et texte en UTF-8
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'})
// préparation contenu HTML
let contenu_html = ""
contenu_html += '<!DOCTYPE html>'
contenu_html += '<html><body>'
contenu_html += "Bonjour à tous <br>"
contenu_html += "<br><br>"
contenu_html += "</body></html>"
// envoie flux HTML
res.write(contenu_html);
// indique fin de transmission
res.end()
});
server.listen(8080);
Conseil :
- faire ses premières armes avec le module http,
- passer au module « express » (module externe) qui facilite la vie notemment pour la gestion des routes.
III Module Filesystem
Module permettant la gestion de fichiers. Module à voir absolument car la gestion de fichiers est un incontournable. Il sera utile tant pour la mise en place de template perso, la sauvegarde de fichiers de paramètres, ma création de répertoire, etc…
Liens utiles :
- doc officielle : https://nodejs.org/dist/latest-v12.x/docs/api/fs.html ;
- explication des principales fonctions : https://oncletom.io/node.js/chapter-04/#fs ;
- exemple d’implémentation des streams : https://www.grafikart.fr/tutoriels/streams-796.
Exemple listant les fichiers du répertoire courant :
const fs = require('fs')
const path = require('path')
liste_fichiers_rep_courant1()
function liste_fichiers_rep_courant1() {
// fichier et répertoire courant vue par Node.js
console.log("fichier actuel : " + __filename)
console.log("répetoire actuel : " + __dirname)
// liste des fichiers dans le répertoire courant
fs.readdir (__dirname, (erreur,fichiers)=> {
if (erreur) {
console.error("Impossible de lister le répertoire")
}
// parcours des fichiers trouvés
for (var un_fichier in fichiers) {
// Construction du chemin complet du fichier
var chemin_fichier = path.join(__dirname,fichiers[un_fichier])
// Information sur le fichier
var stat = fs.statSync(chemin_fichier)
// Affichage suivant le type de fichier
if (stat.isFile()) {
console.log ("-->fichier : \t" + fichiers[un_fichier])
}
if (stat.isDirectory()) {
console.log ("-->répertoire : \t" + fichiers[un_fichier])
}
}
})
}
Ce code utilise la fonction « stats » de manière synchrone, ce qui dans l’idéal devrait se faire en asynchrone.
Même exemple mais totalement asynchrone :
const fs = require('fs')
const path = require('path')
liste_fichiers_rep_courant2()
function liste_fichiers_rep_courant2() {
// fichier et répertoire courant vue par Node.js
console.log("fichier actuel : " + __filename)
console.log("répetoire actuel : " + __dirname)
// liste des fichiers dans le répertoire courant
fs.readdir (__dirname, (erreur,fichiers)=> {
if (erreur) {
console.error("Impossible de lister le répertoire")
}
// parcours des fichiers trouvés
for (var un_fichier in fichiers) {
// Construction du chemin complet du fichier
var chemin_fichier = path.join(__dirname,fichiers[un_fichier])
// Affiche le fichier et son type
type_fichier(__dirname,fichiers[un_fichier], (fichier,stat)=>{
// Affichage suivant le type de fichier
if (stat.isFile()) {
console.log ("-->fichier : \t" + fichier)
}
if (stat.isDirectory()) {
console.log ("-->répertoire : \t" + fichier)
}
})
}
})
}
function type_fichier(chemin,fichier,callback) {
// reconstitue le chemin complet
var chemin_fichier = path.join(chemin,fichier)
// Information sur le fichier
var une_stat = fs.stat(chemin_fichier, (err,stat)=> {
// renvoie fichier + info isdirectory
callback(fichier,stat)
})
}
Ce qui donne le résultat suivant :

Dernier exemple : lecture d’un fichier et affichage web du contenu (en mode asynchrone)
const http = require('http')
const fs = require('fs')
const path = require('path')
var server = http.createServer(function(req, res) {
// Ouverture du fichier
fs.readFile("views/texte.html","utf-8",(err,fd)=>{
// prépare le header : réponse ok (code 200) et texte en UTF-8
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'})
res.write("");
if (err) {
// Erreur : affiche erreur
console.log ("erreur : " + err)
res.write("Erreur : "+ err)
} else {
// pas d'erreur : affiche contenu fichier (qui est du HTML)
var contenu_fichier = fd
res.write(contenu_fichier)
}
// fin génération sortie
res.end()
})
});
server.listen(8080);
Le code va chercher le contenu d’une page nommée « texte.html » et stockée dans le répertoire views. Ensuite il est affiché en mode web.