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 packagefs
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 packagefs
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 !