Accueil

Traduction

Tutoriel sur JS natif, Vue.js, jQuery.js & Node.js

Tutoriel JavaScript - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Node.js en tant que serveur de fichiers

Dans ce chapitre nous allons aborder de nouveaux modules dont "fs" (File system).

Pour appeler le module "fs" il suffit bien sûr d'écrire : const fs = require("fs")

Le module "fs" est nativement installé donc aucune commande NPM n'est nécéssaire.

Lire un fichier

Hypothèse 1 : le nom du fichier à lire est dans le code

Le fichier à lire

Dans mon dossier "prog_node" il existe non seulement des scripts Node mais aussi quelqeus pages web dont une qui est nommée "page_test.htm".
Le code de cette page (extrait) :

Il s'agit donc d'une page web parfaitement structurée.

Le script pour afficher ladite page dans le navigateur

Notez également que les fonctions anonymes s'imbriquent.

Le rendu

En supposant que vous ayez nommé le programme ci-dessus 'lire_page.js' tapez la commande : node lire_page.js.
Lancez le navigateur et tapez en guise d'URL : http://localhost8080 ; la page "page_test.htm" s'affiche dans la fenêtre du navigateur.

Hypothèse 2 : le nom du fichier à lire n'est pas dans le code

Devoir disposer d'un programme par fichier à ouvrir n'est guère pratique. Il faut prévoir un script générique qui peut ouvrir n'importe quelle page web, à charge pour l'utilisateur de saisir le nom du fichier.

Autres pages web dans le dossier

Dans le dossier "prog_node", il existe d'autres pages web : ete.htm & hiver.htm
Le code de la page web "hiver.htm" :

Le code de la page "ete.htm" est identique sauf le contenu de H1 et du paragraphe.

Le code du programme Node "serveur_pages.js"

Ce programme permet d'afficher dans le navigateur une des pages web ou un message d'erreur éventuel.

Il y a trois modules qui sont inclus dans le programme car ce dernier doit "parser" l'URL saisie, traiter un fichier et créer un serveur web.
L'objet url et sa méthode parse() ont été évoqués dans le chapitre précédent.

Dans ce script il y a gestion d'une éventuelle erreur : if (err) return res.end(" erreur 404 : fichier non trouvé")

Le rendu

Les trois tests provoquent successivement l'affichage des trois pages web existantes.
La page "automne.htm" n'existe pas ; il y a alors affichage de d'un message d'erreur dans le navigateur : "erreur 404 : page web inconnue"

Manipuler des fichiers texte

Pour certaines applications, il faut lire/écrire des données permanentes donc stockées dans un fichier texte.

Dans les programmes qui sont évoqués dans la suite de ce chapitre, je n'utilise pas de serveur web mais seulement la console Node.

Créer/remplacer un fichier texte

Le script nommé "creer_fichier.js"

La méthode fs.writeFile() remplace l'ancien contenu par le contenu précisé si le fichier existe. Si le fichier n'existe pas encore, il est crée avec le contenu spécifié.

Notez qu'il y a un gestion des erreurs éventuelles.
L'instruction throw expression génère un message d'erreur.
Cette instruction a été abordée dans le chapitre sur la gestion des erreurs en JS

Le rendu

à partir de la console Node, exécuter plusieurs fois ce script.
Basculez dans l'explorateur Windows et constatez que le fichier "nouveau.txt" existe bien.
Ouvrez le avec un éditeur tel NotePad ; vous constatez qu'il ne contient toujours qu'une ligne de texte.

Créer/ajouter dans un fichier texte

La méthode fs.appendFile() ajoute le contenu spécifié à un fichier. Si le fichier n'existe pas encore, il sera créé avec le contenu précisé.
Il s'agit donc d'une méthode plus souple que "fs.writeFile()".

Le programme "creer_ajouter_fichier.js

Ce programma crée ou ajoute une ligne dans "texte.txt"
Notez la balise BR dans le texte (saut de ligne).
Pour simplifier encore davantage la syntaxe, j'ai utilisé la notaton fléchée pour la fonction anonyme.

Le rendu

Exécuter N fois ce script à partir de la console Node puis utiliser le programme "serveur_page.js" pour afficher son contenu dans le navigateur.
Le fichier contient autant de lignes que d'exécution du programme.
Notez que le balisage HTML (balise BR) est pris en compte par le navigateur.

Renommer un fichier

Le programme "renommer_fichier.js"

Encore un programme particulièrement succinct.

Le rendu

Exécutez ce script à partir de la console Node puis vérifiez via l'explorateur Windows que le fichier "texte.txt" a bien été renommé "textenouveau.txt".
Exécutez de nouveau ce script ; il y a alors un message d'erreur puisqu'il y a gestion des erreurs (if (err) throw err) et que le fichier "texte.txt" n'existe plus !

Supprimer un fichier

Grâce à un éditeur de textes tel NotePad, dupliquez trois fois "textenouveau.txt" respectivement sous les noms "texte1.txt", "texte2.txt" et "texte3.txt".

Le script de suppression

J'ai employé la méthode fs.unlink() pour supprimer un fichier.

Le rendu

Exécutez ce programme trois fois avec à chaque fois modification du code : remplacer "texte1.txt" par "texte2.txt" puis par "texte3.txt") .

Remarque

On en peut se satisfaire de cette solution bancale.
Il faudrait que le code fasse référence à une variable contenant le nom du fichier à supprimer.
Mais comment renseigner une variable dans un script Node ?
Il faut faire appel au module "prompt-sync" !

Le module "prompt-sync"

Ce module permet de gérer les entrées au clavier de façon synchrone.

Script à saisir et à tester

Bien évidemment j'ai installé auparavant ce module avec le gestionnaire NPM.

Attention l'appel du module est particulier : require('prompt-sync')()
Le module prompt-sync crée une fonction d'invite que vous devez appeler d'où la paire de parenthèses obligatoire en fin d'instruction.

Script de suppression de fichiers - version définitive

Désormais nous sommes capables de concevoir un programme node qui supprime le fichier dont le nom n'est plus dans le code mais est précisé par l'utilisateur.

Le code du programme

nom_fichier désigne une variable donc pas de guillemets !

Le rendu

Exécutez trois fois ce script en saisissant successivment : "texte1.txt" puis "texte2.txt" et enfin "texte3.txt".
Affichez le répertoire après l'avoir actualisé ; les trois fichiers texte ont bien disparu !

À vous de travailler

Savoir les modules installés

Nous avons déjà utilisé quelques modules.
On peut avoir des doutes sur ce qui est déjà installé et ce qui ne l'est pas.
Il suffit de tapez dans l'invite de commandes : npm ls.
Le rendu :

Certains packages ont été installés mais pas encore présentés : express, formidable mongod, etc.
L'installation du package prompt est une maladresse de ma part ; prompt-sync est un module plus récent et surtout, comme vous avez pu le constater, très facile à utiliser.

D'autres modules ne sont pas dans la liste car ils sont natifs : http, url,fs, events, etc.