Comment gérer les erreurs dans une application Express.js
Tags: javascript, programming, beginners, node
Published: 2022-11-03 07:08:55

La gestion des erreurs est quelque chose de très crucial dans tout projet de développement logiciel. En tant que développeurs, nous devons être à même de gérer différents scénarios d'utilisation de notre application, car comme on le dit "il ne faut jamais faire confiance à l'utilisateur". Par exemple, que se passe-t-il quand recevons une entrée de type chaine de caractère alors que nous nous attendions à un entier ? Ou que se passe-t-il si l'utilisateur veut accéder à une page qui n'existe pas ? 

Avec Node & Express il y’ a plusieurs moyens de gérer les erreurs. Dans cet Article nous allons parlé de quelques mécanisme de gestion d’erreurs fréquemment utilisés.

Gestion d’erreurs avec un middleware

un middleware est une fonction se trouvant entre une requête et une réponse. Cette fonction peut accéder aux paramètres d’une requête et les manipulés en sont guise. 

Un middleware normale comprend en générale trois paramètres : 
req : paramètres pour la requête ;
res : paramètre pour la réponse ;
next : paramètre de passage à un autre middleware.

Pour un middleware de gestion d’erreurs on lui ajoute un quatrième paramètre qui est : error ; se paramètre a comme rôle de captiver une erreur et de l’afficher soit dans la console soit au niveau de l’affichage dans le navigateur en cas de besoin.

En titre d’exemple un middleware de gestion d’erreurs est déclarer comme suit : 

```javascript
app.use(function(err, req, res, next) {
  console.log(err);
  res.status(500).send('Quelque ne vas pqs au niveau du serveur');
});
```
Le code montre comment nous captivons une erreur lors de la connexion au serveur avec un statut 500 qui donne d’erreurs serveur et la méthode send pour envoyer un chaîne de caractère.

**Gestion d’erreur avec Try & Catch**

Cette syntaxe (Try...Catch) est souvent utilisée au niveau du controller dans un model MVC (Model Views Controller) pour la gestion d’erreurs lors de l’utilisation des méthodes HTTP.

L’instruction Try-Catch veut simplement dire « Essaye ceci… et s’il y’ a une exception lever Capture ceci...  » . 
Illustrons nos explications par un exemple d’un contrôleur ayant une fonction getProduit utilisant la méthode GET pour afficher tous les produit dans un magasin.

```javascript
exports.getProduit = async (req, res) => {
try {
res.render('Produit');
} catch (error) {
console.log(error);
}
};
```

**Gestion d’erreurs avec une promesse Async&Await**

Asynch est déclarée devant une fonction qui renvoi une promesse.  Elle comprend deux paramètres : (resolve, reject)
resolve est utilisé en cas de la réussite de la requête et reject est utilisée en cas d’erreur.

Await fait en sorte que JavaScript attende que la fonction ayant une promesse se réalise et renvoi le resultat.

Illustrons un exemple avec une function createProduit quit Ajoute un nouveau Produit dans un magasin. 

```javascript
export async function createProduit(req, res) {
    const produit = new Produit({
        _id: mongoose.Types.ObjectId(),
        title: req.body.title,
        description: req.body.description,
    });

    try {
        let newProduit = await produit.save();
        return res.status(201).json({
            success: true,
            message: 'New Product created successfully',
            Produit: newProduit,
        });
    } catch (error) {
        console.error(error);
        return res.status(500).json({
            success: false,
            message: 'Server error. Please try again.',
            error: error.message,
        });
    }
}
```