• 10 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 2/17/23

Développez la fonction delete du back-end

Modifiez la route DELETE

Découvrons comment modifier la route DELETE dans la vidéo ci-dessous !

Il y a deux points auxquels nous devons faire attention lors de la suppression d’un Thing : 

  • Tout d’abord, nous devons nous assurer que la personne qui en fait la requête est bien celle qui a créé ce Thing

  • Puis en ce qui concerne la gestion des fichiers dans notre back-end, il faut absolument nous assurer qu’à chaque suppression d'un Thing de la base de données, le fichier image correspondant est également supprimé.

Dans notre contrôleur stuff, il nous faut une nouvelle importation. Il s'agit du package fs de Node :

const fs = require('fs');

À présent, nous pouvons modifier notre fonction deleteThing() :

exports.deleteThing = (req, res, next) => {
   Thing.findOne({ _id: req.params.id})
       .then(thing => {
           if (thing.userId != req.auth.userId) {
               res.status(401).json({message: 'Not authorized'});
           } else {
               const filename = thing.imageUrl.split('/images/')[1];
               fs.unlink(`images/${filename}`, () => {
                   Thing.deleteOne({_id: req.params.id})
                       .then(() => { res.status(200).json({message: 'Objet supprimé !'})})
                       .catch(error => res.status(401).json({ error }));
               });
           }
       })
       .catch( error => {
           res.status(500).json({ error });
       });
};

Dans cette fonction :

  • Nous utilisons l'ID que nous recevons comme paramètre pour accéder au Thing correspondant dans la base de données.

  • Nous vérifions si l’utilisateur qui a fait la requête de suppression est bien celui qui a créé le Thing.

  • Nous utilisons le fait de savoir que notre URL d'image contient un segment /images/ pour séparer le nom de fichier.

  • Nous utilisons ensuite la fonction unlink du package fs pour supprimer ce fichier, en lui passant le fichier à supprimer et le callback à exécuter une fois ce fichier supprimé.

  • Dans le callback, nous implémentons la logique d'origine en supprimant le Thing de la base de données.

Notre API peut désormais gérer correctement toutes les opérations CRUD contenant des fichiers, que ce soit lorsqu'un utilisateur crée un Thing, met à jour un Thing existant ou supprime un Thing !

En résumé

  • Le package fs expose des méthodes pour interagir avec le système de fichiers du serveur.

  • La méthode unlink() du package  fs  vous permet de supprimer un fichier du système de fichiers.

Qu'avez-vous appris dans cette partie ?

Vous avez presque terminé. Bravo !

Regardons ce que vous avez appris :

  • Vous avez créé un serveur Node et l'avez utilisé pour servir une application Express.

  • Vous avez connecté votre application à une base de données MongoDB et, à l'aide de Mongoose, vous avez créé une API RESTful permettant les opérations CRUD (Create, Read, Update and Delete, soit Créer, Lire, Modifier et Supprimer).

  • Vous avez implémenté une authentification sécurisée à base du token JWT.

  • Enfin, vous avez implémenté la gestion du téléchargement de fichiers, permettant ainsi aux utilisateurs d'ajouter et de supprimer des images.

Félicitations ! Vous avez bientôt terminé ce cours sur Node, Express et MongoDB. Je vous laisse répondre au dernier quiz pour tester vos compétences.

La suite ? À vous de choisir ! Vous pouvez par exemple approfondir vos connaissances back-end. Vous pouvez aussi commencer l'apprentissage d'un framework ou d'une librairie front-end avancée telle que Angular, React ou Vue.

Où que vous alliez par la suite, je vous souhaite bonne chance et happy coding !

Example of certificate of achievement
Example of certificate of achievement