DEV Community

Cover image for Meilleures pratiques pour créer une application Express.js
Landry Bitege for Kali Academy

Posted on • Edited on

Meilleures pratiques pour créer une application Express.js

Partie 1 : Introduction et concepts fondamentaux

1.1 Introduction à Express.js

Express.js est un framework d'application web populaire pour Node.js, construit sur le serveur HTTP natif de Node. Il offre un ensemble minimaliste et flexible d'outils puissants pour développer des applications web robustes et évolutives

💡Imaginez que vous souhaitez créer un site web simple qui affiche la date et l'heure actuelles. Sans un framework comme Express.js, vous devrez écrire du code complexe pour gérer les requêtes HTTP, analyser les données de la requête, formater la date et l'heure, et générer la réponse HTML.

Avec Express.js, le processus devient beaucoup plus simple. Vous pouvez définir des routes pour différentes URL, gérer les requêtes et les réponses de manière concise, et utiliser des modèles de vues pour générer du contenu HTML dynamique.

Voici un exemple simplifié de code Express.js pour afficher la date et l'heure actuelles :

JavaScript

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  const date = new Date();
  const formattedDate = date.toLocaleString();
  res.send(`<h1>La date et l'heure actuelles sont : ${formattedDate}</h1>`);
});

app.listen(3000, () => {
  console.log('Server started on port 3000');
});
Enter fullscreen mode Exit fullscreen mode

Explication du code :

  1. const express = require('express'); : Importe le module Express.js dans votre code.
  2. const app = express(); : Crée une instance de l'application Express.
  3. app.get('/', (req, res) => { ... }); : Définit une route pour la méthode HTTP GET sur l'URL /. Les paramètres req et res représentent respectivement la requête entrante et la réponse à envoyer.
  4. const date = new Date(); : Crée un objet Date représentant la date et l'heure actuelles.
  5. const formattedDate = date.toLocaleString(); : Formate la date et l'heure au format local actuel.
  6. res.send(<h1>La date et l'heure actuelles sont : ${formattedDate}</h1>); : Envoie une réponse HTML contenant la date et l'heure formatées.
  7. app.listen(3000, () => { ... }); : Démarre le serveur Express sur le port 3000.

Avantages d'Express.js

  • Léger et flexible : Son noyau minimaliste permet une personnalisation et une extension faciles.
  • Rapide et performant : Il tire parti de l'architecture asynchrone et événementielle de Node.js pour une performance optimale.
  • Largement adopté : Une communauté importante et une vaste collection de modules tiers disponibles.
  • Facilité d'utilisation : Syntaxe simple et intuitive pour la création d'applications web.

Bien que Express.js soit le framework d'application web populaire pour Node.js, il n'est pas le seul choix disponible. D'autres frameworks pour Node.js :

  • Koa : Un framework minimaliste et performant inspiré d'Express.js.
  • Hapi : Un framework robuste et structuré avec un accent sur la validation et la sécurité.
  • Nest.js : Un framework orienté objet et évolutif basé sur l'architecture TypeScript.
  • Restify : Un framework API RESTful léger et rapide.

Cependant, Express.js se distingue comme le choix le plus populaire et le plus largement adopté pour plusieurs raisons :

  • Communauté vaste et active : Express.js bénéficie d'une communauté de développeurs importante et active, ce qui signifie qu'il y a une abondance de ressources disponibles, des tutoriels aux bibliothèques tierces.
  • Documentation complète et facile à comprendre : La documentation officielle d'Express.js est claire, complète et facile à suivre, même pour les débutants.
  • Facilité d'utilisation : Express.js offre une syntaxe simple et intuitive qui rend le démarrage rapide et facile, même pour les développeurs JavaScript novices.
  • Flexibilité et extensibilité : Son noyau minimaliste permet une personnalisation et une extension faciles pour répondre aux besoins spécifiques de votre application.
  • Performance éprouvée : Express.js est connu pour ses performances élevées et sa capacité à gérer des applications web complexes et à fort trafic.
  • Large éventail de bibliothèques tierces : Un vaste écosystème de bibliothèques tierces est disponible pour étendre les fonctionnalités d'Express.js et simplifier le développement d'applications.

Bien que d'autres frameworks Node.js existent, Express.js, pour ces raisons cité précédemment, se distingue. Ce qui en fait le choix privilégié pour de nombreux développeurs d'applications web Node.js.

En résumé, Express.js simplifie considérablement le développement d'applications web Node.js en offrant un ensemble d'outils puissants et flexibles.

2. Installation et configuration de base d'Express.js

Pour commencer avec Express.js, vous devez d'abord installer Node.js sur votre système. Vous pouvez le télécharger depuis le site officiel

Une fois Node.js installé, suivez ces étapes pour installer et configurer Express.js :

  1. Créez un répertoire pour votre projet : Ouvrez votre terminal ou votre invite de commande et créez un nouveau répertoire pour votre projet Express.js. Par exemple, vous pouvez utiliser la commande suivante :

Shell

mkdir my-express-app
cd my-express-app
Enter fullscreen mode Exit fullscreen mode
  1. Initialiser le projet Node.js : Accédez au répertoire de votre projet et exécutez la commande suivante pour initialiser un projet Node.js :

Shell

npm init
Enter fullscreen mode Exit fullscreen mode

Cela créera un fichier package.json qui contient des informations de base sur votre projet.

  1. Installez Express.js : Exécutez la commande suivante pour installer Express.js en tant que dépendance de votre projet :

Shell

npm install express
Enter fullscreen mode Exit fullscreen mode

Cela télécharge et installe le package Express.js dans votre répertoire de projet.

  1. Création d'un fichier JavaScript principal

Créez un fichier JavaScript pour votre application Express. Vous pouvez le nommer comme vous le souhaitez, mais un nom courant est app.js. Ce fichier contiendra le code principal de votre application.

  1. Importation d'Express.js

Au début de votre fichier app.js, importez le module Express.js en utilisant la syntaxe suivante :

JavaScript

const express = require('express');
Enter fullscreen mode Exit fullscreen mode

Cela donne à votre code JavaScript l'accès aux fonctionnalités d'Express.js.

  1. Création d'une instance d'application Express

Créez une instance de l'application Express en appelant la fonction express():

JavaScript

const app = express();
Enter fullscreen mode Exit fullscreen mode

L'objet app représente votre application Express et vous permet d'utiliser ses diverses méthodes pour définir des routes, gérer des requêtes et des réponses, et configurer le serveur.

  1. Définition des routes et des gestionnaires de route

Utilisez les méthodes d'Express.js pour définir des routes pour différentes URL et associer des fonctions de gestionnaire de route à ces routes. Les fonctions de gestionnaire de route seront appelées lorsque des requêtes HTTP correspondantes arrivent.

Par exemple, pour définir une route pour la racine de votre site Web (/) et afficher un message de bienvenue, vous pouvez utiliser le code suivant :

JavaScript

app.get('/', (req, res) => {
  res.send('Bienvenue sur mon application Express.js !');
});
Enter fullscreen mode Exit fullscreen mode

Dans cet exemple, la méthode app.get() définit une route pour la méthode HTTP GET sur l'URL /. La fonction de gestionnaire de route reçoit deux arguments : req (la requête entrante) et res (la réponse à envoyer). La fonction envoie ensuite une réponse HTML simple contenant le message "Bienvenue sur mon application Express.js !".

Vous pouvez définir des routes pour d'autres URL et utiliser les fonctions de gestionnaire de route pour traiter les requêtes et générer des réponses appropriées. Par exemple, vous pouvez créer une route pour afficher une page À propos de votre application, une route pour traiter un formulaire de contact, ou une route pour accéder à une API RESTful.

  1. Démarrage du serveur Express

Enfin, démarrez le serveur Express en appelant la méthode listen() et en spécifiant un port. L'application écoutera les requêtes HTTP sur ce port.

JavaScript

app.listen(3000, () => {
  console.log('Server started on port 3000');
});
Enter fullscreen mode Exit fullscreen mode

Dans cet exemple, le serveur écoute sur le port 3000. Cela signifie que vous pouvez accéder à votre application à l'adresse http://localhost:3000 dans votre navigateur web.

**Enregistrez votre fichier app.js et exécutez la commande suivante dans votre terminal :

Shell

node app.js
Enter fullscreen mode Exit fullscreen mode

Cela lancera le serveur Express et vous devriez pouvoir voir votre message de bienvenue dans votre navigateur web.

🎉 Félicitations ! Vous avez créé et exécuté votre première application Express.js.

En suivant ces étapes, vous aurez installé et configuré Express.js de base et serez prêt à commencer à créer des applications web Node.js.

N'oubliez pas que ce n'est qu'un point de départ. Vous pouvez étendre votre application en définissant plus de routes, en créant des modèles de vues pour générer du contenu HTML dynamique, en utilisant des middleware pour traiter et intercepter les requêtes et les réponses, et en gérant des bases de données pour stocker et récupérer des données.

1.3. Concepts fondamentaux d'Express.js

Comprendre les concepts fondamentaux d'Express.js peut sembler intimidant au début, surtout pour les débutants. Mais ne vous inquiétez pas !

Je vais vous expliquer ces concepts de manière simple et concrète, en utilisant des exemples quotidiens que vous comprendrez facilement.

Imaginons que vous construisez une cabane dans les bois. Pour que vos amis puissent vous rendre visite, vous devez créer des chemins et des points de repère clairs. De même, pour créer une application web organisée et facile à utiliser, vous devez structurer les requêtes et les réponses à l'aide des concepts fondamentaux d'Express.js.

1. Routage : Le plan de votre cabane

Le routage est comme la carte de votre application web. Il définit les différentes URL que les utilisateurs peuvent visiter et détermine quelle partie de votre code doit gérer chaque requête.

Imaginez que chaque pièce de votre cabane est une route.

  • / (la page d'accueil) : Mène à l'entrée principale, où les utilisateurs ont une vue d'ensemble de votre cabane.
  • /salon : Guide les utilisateurs vers le salon confortable, où ils peuvent se détendre et discuter.
  • /cuisine : Conduit à la cuisine accueillante, où ils peuvent préparer de délicieux repas.
  • /chambres : Mène aux chambres douillettes, où ils peuvent se reposer après une journée d'exploration.

Dans Express.js, vous définissez des routes à l'aide de méthodes HTTP (GET, POST, PUT, DELETE) et d'URL.

  • app.get('/', (req, res) => { ... }); : Gère les requêtes GET vers la page d'accueil (/).
  • app.post('/salon', (req, res) => { ... }); : Traite les requêtes POST envoyées au salon (/salon).

2. Requêtes et réponses : Les conversations avec vos amis

Lorsque vos amis visitent votre cabane, ils vous font des demandes (requêtes) et vous leur répondez (réponses). De même, les requêtes et réponses sont la base de la communication entre les utilisateurs et votre application web.

Imaginez que vos amis:

  • Font des demandes :
    • Demander un verre d'eau (requête GET).
    • Partager une histoire amusante (requête POST).
    • Demander l'emplacement des toilettes (requête GET).
  • Reçoivent des réponses :
    • Vous leur offrez un verre d'eau frais (réponse).
    • Vous riez à leur histoire et racontez la vôtre (réponse).
    • Vous les guidez vers les toilettes (réponse).

**En Express.js, l'objet req représente la requête entrante et l'objet res représente la réponse à envoyer.

  • req contient des informations sur la demande, telles que l'URL, les en-têtes, le corps et les paramètres.
  • res vous permet d'envoyer des réponses, y compris le code d'état, les en-têtes et le corps.

**Par exemple, pour envoyer une réponse HTML simple à la page d'accueil (/), vous pouvez utiliser :

JavaScript

app.get('/', (req, res) => {
  res.send('<h1>Bienvenue dans ma cabane !</h1>');
});
Enter fullscreen mode Exit fullscreen mode

3. Middleware : Les règles de votre cabane

Le middleware agit comme les règles de votre cabane pour garantir une expérience fluide et sécurisée pour vos amis.

Imaginez que vous avez des règles :

  • Enlever les chaussures avant d'entrer : Un middleware peut vérifier si les utilisateurs ont envoyé un jeton d'authentification valide.
  • Se laver les mains avant de manger : Un middleware peut désinfecter les données entrées par les utilisateurs pour éviter les injections de code malveillant.
  • Respecter le silence après 22 heures : Un middleware peut limiter l'accès à certaines pages pendant la nuit.

En Express.js, vous pouvez créer des fonctions middleware personnalisées pour effectuer des tâches avant que les gestionnaires de route ne soient appelés.

JavaScript

app.use((req, res, next) => {
  // Vérifier si l'utilisateur est authentifié
  if (!req.isAuthenticated) {
    res.redirect('/login');
    return;
  }
  next();
});
Enter fullscreen mode Exit fullscreen mode

4. Modèles de vues : La décoration de votre cabane

Imaginez que vous souhaitez rendre votre cabane plus accueillante en ajoutant des meubles, des décorations et des touches personnalisées. C'est là que les modèles de vues entrent en jeu. Ils vous permettent de générer du contenu HTML dynamique et personnalisé pour chaque requête.

Reprenons l'exemple de la cabane :

  • Meubles : Au lieu d'envoyer du HTML brut en tant que réponse, vous pouvez utiliser un moteur de templating pour générer du HTML dynamique en fonction des données.
  • Décorations : Vous pouvez inclure des images, des CSS et des polices de caractères pour rendre votre page plus attrayante.
  • Touches personnalisées : Vous pouvez personnaliser le contenu en fonction de l'utilisateur ou de la requête, comme afficher le nom de l'utilisateur connecté ou des messages d'erreur personnalisés.

En Express.js, vous pouvez utiliser divers moteurs de templating populaires, tels que EJS, Pug et Handlebars.

**Par exemple, avec EJS, vous pouvez créer un fichier index.ejs pour votre page d'accueil et l'afficher dans votre gestionnaire de route :

JavaScript

app.get('/', (req, res) => {
  const name = req.user ? req.user.name : 'Invité';
  res.render('index', { name });
});
Enter fullscreen mode Exit fullscreen mode

**Le fichier index.ejs peut ressembler à ceci :

HTML

<h1>Bienvenue, <%= name %> !</h1>

<p>Bienvenue dans ma cabane. Installez-vous confortablement et profitez de votre séjour !</p>
Enter fullscreen mode Exit fullscreen mode

**Express.js rend le modèle EJS et fusionne les données fournies (l'objet { name }) dans le template pour générer le HTML final envoyé à l'utilisateur.

En résumé, ces concepts fondamentaux d'Express.js vous permettra de créer des applications web structurées, dynamiques et évolutives.

N'oubliez pas que ces concepts ne sont que la base. Au fur et à mesure que vous développez des applications plus complexes, vous découvrirez des fonctionnalités avancées d'Express.js telles que la gestion des sessions, la validation des formulaires, la gestion des erreurs et la prise en charge des WebSockets.

1.4. Gestion des erreurs : Gérer les imprévus dans votre cabane

Imaginez que vous organisez une fête dans votre cabane dans les bois. Vous avez tout planifié, il est inévitable que des imprévus se produisent. Un invité peut renverser un verre, la musique peut s'arrêter ou la nourriture peut manquer une panne de courant ou un invité qui se blesse. De même, dans les applications web, des erreurs peuvent survenir, telles que des requêtes malformées, des ressources introuvables ou des erreurs internes du serveur.

C'est là que la gestion des erreurs d'Express.js entre en jeu. Elle vous fournit des outils pour gérer ces erreurs de manière gracieuse et informative, garantissant ainsi une expérience utilisateur fluide même en cas de problème.

1. Comprendre les erreurs

Les erreurs peuvent survenir à différents niveaux de votre application

Voici quelques exemples d'erreurs courantes dans les applications web :

  • Erreurs de routage : L'utilisateur essaie d'accéder à une URL qui n'existe pas.
  • Erreurs de base de données : Un problème se produit lors de l'accès ou de la modification de données dans une base de données.
  • Erreurs d'authentification : L'utilisateur essaie d'accéder à une ressource protégée sans autorisation.
  • Erreurs de validation : L'utilisateur fournit des données incorrectes ou incomplètes dans un formulaire.
  • Erreurs internes du serveur : Un problème inattendu se produit du côté serveur.

2. Middleware d'erreur

Express.js fournit un moyen simple et efficace de gérer les erreurs à l'aide de son middleware d'erreur intégré.

Voici un exemple de code pour gérer une erreur de routage :

JavaScript

app.use((err, req, res, next) => {
  if (err.status === 404) {
    res.status(404).send('<h1>Page introuvable !</h1>');
  } else {
    console.error(err.stack);
    res.status(500).send('<h1>Erreur interne du serveur.</h1>');
  }
});
Enter fullscreen mode Exit fullscreen mode

Ce middleware intercepte toutes les erreurs non gérées et les traite en fonction du code d'état d'erreur :

  • Si le code d'état est 404 (Not Found): Il envoie une page d'erreur 404 conviviale à l'utilisateur.
  • Sinon : Il enregistre l'erreur dans la console et envoie une page d'erreur 500 générique à l'utilisateur.

**Vous pouvez également utiliser des packages tiers comme express-error-handler pour une gestion des erreurs plus avancée.

3. Gestion des erreurs spécifiques

Vous pouvez également créer des gestionnaires d'erreurs spécifiques pour différents types d'erreurs. Par exemple, vous pouvez créer un gestionnaire d'erreur pour les ressources introuvables (code d'état 404) et un autre pour les erreurs de validation des formulaires.

JavaScript

app.get('/ressource/:id', (req, res, next) => {
  try {
    // Rechercher la ressource par ID
    const resource = findResourceById(req.params.id);
    if (!resource) {
      throw new Error('Ressource introuvable');
    }
    res.json(resource);
  } catch (err) {
    next(err); // Transmettre l'erreur au middleware d'erreur
  }
});
Enter fullscreen mode Exit fullscreen mode

4. Messages d'erreur clairs et utiles

Lorsqu'une erreur se produit, il est important de fournir à l'utilisateur un message d'erreur clair et utile. Cela permet à l'utilisateur de comprendre ce qui s'est passé et de savoir comment y remédier.

5. Journalisation des erreurs

Il est également important de journaliser les erreurs pour pouvoir les suivre et les déboguer ultérieurement. Vous pouvez utiliser des bibliothèques de journalisation telles que console.error ou des services de journalisation tiers.

En résumé, la gestion des erreurs est un aspect crucial de toute application web robuste. En utilisant les fonctionnalités de gestion des erreurs d'Express.js, vous pouvez garantir que votre application reste stable et résiliente face aux imprévus, offrant ainsi une meilleure expérience utilisateur.

N'oubliez pas que la gestion des erreurs est un sujet vaste et qu'il existe de nombreuses techniques et pratiques avancées que vous pouvez explorer au fur et à mesure que vos applications se complexifient.

Conclusion

Félicitations ! Vous avez franchi une étape importante dans la création d'applications web performantes avec Express.js. Vous avez compris les concepts fondamentaux tels que le routage, les requêtes et réponses, le middleware et les modèles de vues, et vous avez appris à gérer les erreurs de manière efficace.

N'oubliez pas que ce n'est que le début de votre aventure Express.js. De nombreuses fonctionnalités puissantes et des pratiques de développement vous attendent pour créer des applications web dynamiques, évolutives et sécurisées.

Voici quelques ressources supplémentaires qui pourraient vous aidez à continuer votre apprentissage :

N'oubliez jamais que l'apprentissage est un processus continu. Restez curieux, explorez et créez, et vous deviendrez un maître du développement d'applications Express.js !

Pour la suite, je vous invite à lire la deuxième partie qui parle des “Meilleures pratiques et fonctionnalités avancées d’Express.js”

Top comments (0)