I Les principaux modules présents

Nodes.js comprend plus de 40 modules intégrés qui sont les suivants :

Assertion testingAsync hooksBufferC++ addons
C/C++ addons with N-APIChild processesClusterCommand line options
ConsoleCryptoDebuggerDNS
DomainECMAScript modulesErrorsEvents
File systemGlobalsHTTPHTTP/2
HTTPSInspectorInternationalizationModules
NetOSPathPerformance hooks
PoliciesProcessPunycodeQuery strings
ReadlineREPLReportStream
String decoderTimersTLS/SSLTrace events
TTYUDP/datagramURLUtilities
V8VMWASIWorker 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 :

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 :

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.

Node.js : les modules intégrés à Node.js

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *