oujood.com

ExpressJS & Pug : Guide Complet du Templating

Apprenez à utiliser Pug avec ExpressJS pour simplifier la génération de templates HTML. Tutoriel complet avec exemples de code et bonnes pratiques.
Apprenez comment utiliser Pug avec ExpressJS pour générer du HTML de manière optimisée et dynamique.

chercher |

🔍 Introduction à Pug et ExpressJS

Pug (anciennement Jade) est un moteur de templates puissant utilisé avec ExpressJS pour générer des pages HTML dynamiquement. Il simplifie le code en supprimant les balises de fermeture et en utilisant une indentation propre.

📂Préparation de l'environnement :

Avant de passer à l'installation et quand tu crées un projet ExpressJS, comme la structure de base du projet n'est pas générée automatiquement par Express. Alors tous les dossiers nécessaires à l'organisation de ton projet, comme /views, /public, /routes, etc., doivent être créés manuellement.

Création manuelle des dossiers dans un projet ExpressJS avec Pug

🔑 Pourquoi créer ces dossiers manuellement ?

Créer ces dossiers permet de mieux organiser ton projet. Chaque dossier aura un rôle spécifique, ce qui rendra ton code plus lisible et facile à maintenir, surtout à mesure que ton application devient plus complexe.

🛠️ Comment créer les dossiers manuellement ?

Voici les étapes détaillées pour créer les dossiers nécessaires à ton projet ExpressJS avec Pug ici nous allons utiliser du JavaScript:

La création d'un dossier manuellement est une opération simple, que ce soit sur un ordinateur (Windows, macOS, Linux) ou sur un smartphone (Android, iOS). Voici une brève explication pour chaque système :

Sur un ordinateur (Windows, macOS, Linux) :

  • Windows :
    • Ouvrez l'Explorateur de fichiers (icône de dossier dans la barre des tâches).
    • Naviguez jusqu'à l'endroit où vous souhaitez créer le dossier.
    • Faites un clic droit dans une zone vide, sélectionnez "Nouveau", puis "Dossier".
    • Tapez le nom du dossier et appuyez sur Entrée.
  • macOS :
    • Ouvrez le Finder (icône de visage souriant dans le Dock).
    • Naviguez jusqu'à l'endroit où vous souhaitez créer le dossier.
    • Faites un clic droit (ou Ctrl + clic) dans une zone vide, puis sélectionnez "Nouveau dossier".
    • Tapez le nom du dossier et appuyez sur Retour.
  • Linux :
    • Ouvrez le gestionnaire de fichiers (par exemple, Nautilus, Dolphin).
    • Naviguez jusqu'à l'endroit où vous souhaitez créer le dossier.
    • Faites un clic droit dans une zone vide, puis sélectionnez "Nouveau dossier".
    • Tapez le nom du dossier et appuyez sur Entrée.

Sur un smartphone (Android, iOS) :

  • Android :
    • Ouvrez l'application "Gestionnaire de fichiers" ou "Mes fichiers".
    • Naviguez jusqu'à l'endroit où vous souhaitez créer le dossier.
    • Appuyez sur l'icône "Plus" (souvent trois points ou un signe plus), puis sélectionnez "Créer un dossier".
    • Tapez le nom du dossier et appuyez sur "OK".
  • iOS :
    • Ouvrez l'application "Fichiers".
    • Naviguez jusqu'à l'endroit où vous souhaitez créer le dossier.
    • Touchez l'icône "Plus" (trois points en haut à droite), puis sélectionnez "Nouveau dossier".
    • Tapez le nom du dossier et appuyez sur "Terminé".

Création de dossiers via le terminal

On peut aussi créer des dossiers via un terminal.

La création de dossiers via un terminal est une méthode rapide et efficace, particulièrement appréciée des utilisateurs avancés. Voici une explication des commandes à utiliser selon votre système d'exploitation :

Sur Linux et macOS :

  • Commande mkdir (make directory) :
    • Cette commande est utilisée pour créer un ou plusieurs dossiers.
    • Syntaxe de base : mkdir nom_du_dossier
    • Exemple : mkdir mon_dossier (crée un dossier nommé "mon_dossier" dans le répertoire courant).
    • Options utiles :
      • -p : Permet de créer une arborescence de dossiers si nécessaire. Exemple : mkdir -p dossier1/sous_dossier1/sous_sous_dossier1 (crée tous les dossiers intermédiaires si ils n'existent pas).
      • Pour créer plusieurs dossiers à la fois : mkdir dossier1 dossier2 dossier3
    • Navigation dans le terminal :
      • cd (change directory) : pour changer de répertoire.
      • ls (list) : pour lister les fichiers et dossiers dans le répertoire courant.

Sur Windows (PowerShell ou Invite de commandes) :

  • Commande mkdir ou md (make directory) :
    • Ces commandes sont équivalentes et servent à créer un dossier.
    • Syntaxe : mkdir nom_du_dossier ou md nom_du_dossier
    • Exemple : mkdir mon_dossier (crée un dossier nommé "mon_dossier" dans le répertoire courant).
    • Options utiles :
      • mkdir -p : fonctionne de la même manière que sur linux ou macOS pour créer une arborescence de dossier.
    • Navigation dans le terminal :
      • cd : pour changer de répertoire.
      • dir : pour lister les fichiers et dossiers dans le répertoire courant.
  • Créer le dossier /views : Ce dossier contiendra tous les fichiers Pug qui servent de templates pour générer du HTML. Par exemple, tu y mettras des fichiers comme index.pug, about.pug, ou des layouts comme layout.pug.

    📋 Copier le code

    // Pour créer un dossier on utilise la commande mkdir
    mkdir views
    
  • Créer le dossier /public : Ce dossier est utilisé pour stocker tous les fichiers statiques (CSS, images, JavaScript). Express peut servir ce dossier via la fonction express.static().

    📋 Copier le code

    mkdir public
    mkdir public/css
    mkdir public/images
    mkdir public/js
    
  • Créer le dossier /routes : Ce dossier est facultatif mais recommandé pour une meilleure organisation. Il contient tous les fichiers qui définissent les routes de ton application Express.
    mkdir routes
    
  • Créer le dossier /controllers : Ce dossier est également facultatif et utile si tu souhaites séparer la logique de tes routes.

    📋 Copier le code

    mkdir controllers
    
  • Créer le dossier /models : Ce dossier est utilisé si tu travailles avec une base de données. Il contiendra les modèles qui interagissent avec ta base de données.

    📋 Copier le code

    mkdir models
    

📁 Structure complète du projet après avoir créé tous les dossiers

Une fois que tu as créé tous ces dossiers, voici à quoi pourrait ressembler la structure de ton projet :

/mon-projet
│── /views          → Contient les fichiers Pug (templates)
│    ├── layout.pug   → Template principal (layout global)
│    ├── index.pug    → Page d'accueil
│    ├── about.pug    → Page "À propos"
│── /public         → Contient les fichiers statiques (CSS, images, JS)
│    ├── css/
│    │   ├── styles.css
│    ├── images/
│    ├── js/
│── /routes         → Contient les fichiers de routes Express
│    ├── index.js
│── /controllers    → Contient la logique métier (facultatif)
│── /models         → Contient les modèles de base de données (facultatif)
│── index.js        → Fichier principal (serveur Express)
│── package.json    → Dépendances et scripts
│── package-lock.json

📝 Explication des dossiers :

  • /views/ : Contient les fichiers Pug pour générer du HTML côté serveur.
  • /public/ : Contient les fichiers statiques (CSS, images, JavaScript) que le serveur servira.
  • /routes/ : Contient les fichiers qui définissent les routes (facultatif, pour une organisation claire).
  • /controllers/ : Gère la logique métier ou le traitement des données (facultatif).
  • /models/ : Contient les modèles de données si ton application interagit avec une base de données (facultatif).

🔥 Résumé :

Ces dossiers doivent être créés manuellement pour bien organiser ton projet ExpressJS. En séparant les différentes parties de l'application, tu rendras ton projet plus facile à maintenir et à faire évoluer au fil du temps. 🚀

⚙️ Installation et Configuration

Installez Pug via npm en exécutant le code suivant:

📋 Copier le code

npm install --save pug

Explication du code

  • install: Cette commande dit à npm d'installer un package.
  • --save: Cette option indique à npm d'ajouter le package installé (dans ce cas, "pug") à la liste des dépendances dans le fichier package.json de votre projet. Cela signifie que votre projet dépend de ce package pour fonctionner correctement. Lorsque d'autres développeurs clonent votre projet et exécutent npm install, ils installeront automatiquement ce package.
  • pug: C'est le nom du package que vous souhaitez installer.

⚙️ Configuration d'ExpressJS pour utiliser Pug

Avant de pouvoir utiliser Pug comme moteur de templates avec ExpressJS, il est nécessaire de configurer l'application Express pour qu'elle reconnaisse et utilise ce moteur de rendu. Cette configuration permet à Express de comprendre que les fichiers de vues sont au format Pug et de savoir où les trouver dans l'architecture du projet.

Ajoutez la configuration suivante à votre fichier index.js :

📋 Copier le code

var express = require('express');
var app = express();
app.set('view engine', 'pug');
app.set('views', './views');
app.listen(3000);

🔍 Explication détaillée du code :

  • var express = require('express'); → Cette ligne importe le module ExpressJS, qui est essentiel pour créer un serveur web en Node.js.
  • var app = express(); → Ici, nous initialisons une nouvelle application Express.
  • app.set('view engine', 'pug'); → Cette ligne définit Pug comme moteur de templates par défaut. Ainsi, chaque fois que nous utiliserons res.render(), Express saura qu'il doit rechercher un fichier .pug.
  • app.set('views', './views'); → Cela indique à Express que les fichiers de templates Pug se trouvent dans le dossier views/, situé à la racine du projet.
  • app.listen(3000); → Cette ligne démarre le serveur sur le port 3000. Cela signifie que l'application sera accessible via l'URL http://localhost:3000.

Grâce à cette configuration, votre serveur Express est maintenant prêt à interpréter des templates Pug et à les rendre dynamiquement en HTML. Dans la prochaine section, nous allons voir comment créer et afficher une première page en Pug. 🚀

🖋️ Création d'un premier template avec Pug

Créez un fichier first_view.pug dans le dossier views/ :

📋 Copier le code

doctype html
html
head
title Hello Pug
body
p.greetings#people Hello World!

Explication du code

  • doctype html: Ceci génère la déclaration <!DOCTYPE html>, indiquant au navigateur qu'il s'agit d'un document HTML5.
  • html: Ceci génère la balise <html>. En Pug, l'indentation définit la structure HTML, donc tout ce qui est indenté sous html sera à l'intérieur de la balise <html>.
  • head: Ceci génère la balise <head>. title Hello
  • Pug: Ceci génère la balise <title>Hello Pug</title>.
  • body: Ceci génère la balise <body>.
  • p.greetings#people Hello World!: Ceci génère un paragraphe <p> avec la classe greetings et l'ID people, contenant le texte "Hello World!".
    p indique un paragraphe.
    .greetings ajoute une classe css nommée greetings.
    #people ajoute un id html nommé people.
    Hello World! est le texte à l'interieur de la balise <p></p>.

Pour afficher la paje ajoutez la route suivante :

ce code fait les choses suivantes :
Il définit une route GET pour /first_template.
Lorsque cette route est atteinte, il utilise le moteur de template Pug pour rendre le fichier first_view.pug.
Le code HTML généré à partir de first_view.pug est envoyé comme réponse au client (le navigateur).
Donc, lorsque un utilisateur entre l'url /first_template dans son navigateur, le serveur envoie le fichier html généré par first_view.pug.

📋 Copier le code

app.get('/first_template', function(req, res) {
res.render('first_view');
});

Explication du code

  • 1. app.get('/first_template', function(req, res) { ... }); :
    • app.get() est une méthode d'Express.js utilisée pour définir une route GET.
    • '/first_template' est le chemin de l'URL que le serveur écoutera. Lorsqu'un utilisateur accède à http://votre-domaine.com/first_template (ou http://localhost:3000/first_template si vous testez localement), la fonction de rappel (callback) sera exécutée.
    • function(req, res) { ... } est la fonction de rappel qui sera exécutée lorsque la route est atteinte.
    • req (request) est l'objet qui contient les informations sur la requête HTTP (par exemple, les paramètres de l'URL, les en-têtes, etc.).
    • res (response) est l'objet utilisé pour envoyer une réponse HTTP au client (par exemple, du HTML, du JSON, etc.).
  • 2. res.render('first_view'); :
    • res.render() est une méthode d'Express.js utilisée pour rendre une vue (un fichier de template).
    • 'first_view' est le nom du fichier de vue que vous souhaitez rendre. Express utilisera le moteur de template configuré (dans notre cas, Pug) pour traiter ce fichier et générer le code HTML final.
    • Express va chercher le fichier first_view.pug dans le dossier de vues défini par app.set('views', './views'); (ou le chemin que vous avez configuré).

🚀 Fonctionnalités principales de Pug

✔️ Syntaxe simplifiée

  • Indentation pour structurer le code.
  • Pas de balises de fermeture.
  • Interpolation des variables avec #{variable}.

🎯 Variables dynamiques

Exemple d'affichage dynamique :

Le code fait les choses suivantes :
Il définit une route GET pour /dynamic_view.
Lorsque cette route est atteinte, il rend le fichier dynamic.pug.
Il passe un objet de données au template Pug, contenant les variables name et url.
Dans le fichier dynamic.pug, vous pouvez utiliser ces variables pour afficher dynamiquement "ExpressJS" et "https://expressjs.com" dans le code HTML généré.

📋 Copier le code

app.get('/dynamic_view', function(req, res) {
res.render('dynamic', { name: "ExpressJS", url: "https://expressjs.com" });
});

Explication du code

res.render('dynamic', { name: "ExpressJS", url: "https://expressjs.com" }); :
res.render('dynamic', ...) : Utilise le moteur de template configuré (Pug) pour rendre le fichier dynamic.pug.
{ name: "ExpressJS", url: "https://expressjs.com" } : Ceci est un objet JavaScript qui contient des données à passer au template Pug. Ces données peuvent être utilisées pour générer du contenu dynamique dans la vue.
name: "ExpressJS" : Définit une variable name avec la valeur "ExpressJS".
url: "https://expressjs.com" : Définit une variable url avec la valeur "https://expressjs.com".

Fichier dynamic.pug :

📋 Copier le code

doctype html
html
  head
    title Dynamic View
  body
    h1 Hello, #{name}!
    p Visit the website: 
      a(href=url) #{url}

Dans cet exemple de dynamic.pug, #{name} et #{url} sont remplacés par les valeurs passées depuis le code JavaScript.

Voici une explication ligne par ligne :
html: Ceci génère la balise <html>. Tout ce qui est indenté en dessous sera inclus dans la balise <html>.
head: Ceci génère la balise <head>.
title=name: Ceci génère la balise <title>.
=name : Ceci indique à Pug de remplacer =name par la valeur de la variable name qui a été passée depuis le code JavaScript (dans l'exemple précédent, name était "ExpressJS").
body: Ceci génère la balise <body>.
h1=name: Ceci génère la balise <h1>.
=name : Ceci indique à Pug de remplacer =name par la valeur de la variable name passée depuis le JavaScript.
a(href=url) URL: Ceci génère une balise <a> (lien).
href=url : Ceci définit l'attribut href du lien à la valeur de la variable url passée depuis le JavaScript (dans l'exemple précédent, url était "https://expressjs.com").
URL : Ceci est le texte affiché pour le lien.

Si les variables name et url sont passées avec les valeurs "Oujood" et "https://ww.oujood.com" respectivement, le code HTML généré sera :

📋 Copier le code

<html>
  <head>
    <title>Oujood</title>
  </head>
  <body>
    <h1>ExpressJS</h1>
    <a href="https://ww.oujood.com">URL</a>
  </body>
</html>

Ce fichier Pug est conçu pour afficher dynamiquement le titre et le contenu de la page en utilisant les données passées depuis le code JavaScript. Il est particulièrement utile pour créer des pages web qui affichent des informations variables en fonction des données fournies par le serveur.

❓ FAQ - Questions fréquentes

✅ Pug est-il meilleur que EJS ?

Oui, si vous recherchez une syntaxe plus concise et lisible. Non, si vous préférez une structure plus proche du HTML.

✅ Comment installer Pug avec ExpressJS ?

Exécutez la commande : npm install --save pug puis configurez ExpressJS.

✅ Peut-on inclure des fichiers dans Pug ?

Oui, grâce à la directive include. Exemple :

📋 Copier le code

include ./header.pug

📚 Pour aller plus loin, consultez la documentation officielle de Pug.



Voir aussi nos tutoriel :

Système de panier d'achat avec PHP et MySQL

Créer un système de panier d'achat avec PHP et MySQL. Le système de panier d'achat permettra aux visiteurs du site Web de rechercher des produits, d'ajouter des produits au panier et de passer des commandes.

PHP les fonctions xml

PHP les fonctions xml

fonction hebrevc

Convertit un texte logique hébreux en texte visuel, avec retours la ligne