Node.js - 5.13 Envoyer des fichiers HTML avec sendFile()
Écrire du HTML dans le JavaScript devient vite difficile à lire. Express permet de renvoyer un fichier HTML complet avec res.sendFile(). Cette leçon montre comment indiquer le bon chemin de ce fichier, en utilisant le module path, qui est natif à Node.js.
Renvoyer un fichier avec sendFile()
La méthode res.sendFile() renvoie un fichier à l'utilisateur. Elle définit automatiquement le type de contenu de la réponse, en fonction du fichier envoyé. Il faut lui donner le chemin complet du fichier.
Construire le chemin avec path.join()
Un chemin qui commence par un slash part de la racine du système, et non du dossier du projet. Le module path assemble les segments d'un chemin avec le bon séparateur, selon le système d'exploitation. La variable __dirname contient le dossier du fichier en cours d'exécution.
Le fichier de la route se trouve dans le dossier routes, alors que les vues sont dans un dossier voisin. Il faut donc remonter d'un niveau avec '..' pour atteindre le dossier views.
const path = require('path');
res.sendFile(path.join(__dirname, '..', 'views', 'shop.html'));
En résumé
res.sendFile() renvoie un fichier HTML avec le bon type de contenu. Le chemin se construit avec path.join() à partir de __dirname. Le segment '..' permet de remonter d'un niveau quand le fichier se trouve dans un sous-dossier.
Points clés
- res.sendFile() renvoie un fichier et définit le type de contenu automatiquement.
- Un chemin qui commence par un slash part de la racine du système.
- Le module path est natif à Node.js et ne s'installe pas.
- path.join() assemble les segments avec le séparateur adapté au système.
- __dirname désigne le dossier du fichier en cours, et '..' remonte d'un niveau.
Questions fréquentes
Pourquoi un chemin commençant par un slash ne fonctionne-t-il pas ?
Ce slash désigne la racine du système, et non le dossier du projet. Il faut construire le chemin à partir de __dirname.
Faut-il installer le module path ?
Non. Le module path fait partie de Node.js. Il suffit de le charger avec require.
Pourquoi utiliser path.join() plutôt que la concaténation de texte ?
path.join() choisit le bon séparateur selon le système. Le même code fonctionne ainsi sous Linux et sous Windows.