Express 04 - đïž MĂ©thode DELETE et suppression de donnĂ©es
â ïž Avant de commencer cette quĂȘte, nous te recommandons de jeter un Ćil Ă celles-ci :
Dans les quĂȘtes prĂ©cĂ©dentes, tu as appris Ă :
- Configurer et créer une base de données avec Express
- Créer des routes basiques
- Récupérer des informations de ta base de données
- Insérer de nouvelles données dans ta base
- Appliquer des changements aux données existantes.
Dans cette quĂȘte, pour complĂ©ter le dĂ©veloppement de ton API REST, tu vas apprendre Ă supprimer les donnĂ©es existantes. Voyons comment faire en utilisant Express et MySQL.
đ€ Dans cette quĂȘte, tu vas apprendre comment :
â Ecrire des routes DELETE â Supprimer des donnĂ©es de la base de donnĂ©es â Tester ces routes en utilisant Postman
đïž Comment crĂ©er un HANDLER de routes DELETE avec Express ?
PrĂ©cĂ©demment, quand tu as rencontrĂ© une requĂȘte de ce type :
PUT http://localhost:5000/api/movies/2
Content-type: application/json
{
"title": "Citizen Kane",
"director": "Orson Wells",
"year": "1941",
"color": "0",
"duration": 120
}
Tu as déclaré une route pour y répondre comme ceci :
app.put("/api/movies/:id", HANDLER);
Ensuite, dans le HANDLER, tu as rĂ©cupĂ©rĂ© le 2 de l'url via req.params.id. Enfin, tu as dĂ©terminĂ© si cet id Ă©tait valide via le affectedRows de la requĂȘte SQL.
Maintenant, nous voulons gĂ©rer les requĂȘtes pour supprimer des ressources, comme celle-ci :
DELETE http://localhost:5000/api/movies/2
Ă toi de jouer :
false|||true|||false
# Quelle méthode app dois-tu utiliser pour déclarer une route ?
[] `app.post()`
[] `app.get()`
[x] `app.delete()`
[] `app.put()`
# Quel chemin dois-tu utiliser comme premier paramĂštre ?
[x] `"/api/movies/:id"`
[] `"/api/movies"`
[] `"/api/users"`
[] `"/api/users/:id"`
# A travers quelle propriĂ©tĂ© de requĂȘte vas-tu rĂ©cupĂ©rer l'id du film ?
[x] `req.params`
[] `req.body`
[] `req.query`
# Quelle opération SQL vas-tu réaliser ici ?
[] `SELECT`
[] `INSERT`
[] `UPDATE`
[x] `DELETE`
C'est parti ! Essaie de créer une route pour DELETE /api/movies/:id. Souviens toi d'aller checker cette page pour choisir le status HTTP adapté à ta réponse. En cas de succÚs, tu peux choisir l'option "No Content" comme indiqué dans la description détaillée pour DELETE ;)
Afficher la solution|||javascript|||Tu as des doutes sur comment faire ?|||0|||Masquer
// in movieControllers.js
const deleteMovie = (req, res) => {
const id = parseInt(req.params.id);
database
.query("delete from movies where id = ?", [id])
.then(([result]) => {
if (result.affectedRows === 0) {
res.sendStatus(404);
} else {
res.sendStatus(204);
}
})
.catch((err) => {
console.error(err);
res.sendStatus(500);
});
};
module.exports = {
getMovies,
getMovieById,
postMovie,
updateMovie,
deleteMovie, // don't forget to export your function ;)
};
// in app.js
app.delete("/api/movies/:id", movieControllers.deleteMovie);
Tester notre route DELETE

Crée un nouveau film en utilisant la route POST et note son id.
CrĂ©e une nouvelle requĂȘte, fais dĂ©filer la liste des mĂ©thodes et sĂ©lectionne "DELETE". Ensuite, entre l'adresse du film :
http://localhost:5000/api/movies/<id of the newly created movie>
Clique sur "Send", et regarde le résultat. Essaie de supprimer à nouveau : cette fois-ci ton serveur devrait répondre "Not Found" ;)
đȘ Challenge
Supprimer un utilisateur dans la base de données
Maintenant que tu as créé la route DELETE pour les films, créé la route DELETE pour supprimer des utilisateurs !
- Crée une route DELETE pour le chemin
/api/users/:idqui va supprimer un utilisateur dans la base de données - Poste un lien GitHub pour partager ta solution
đ§ CritĂšres de validation
- [ ] Le lien GitHub contient une route DELETE pour les utilisateurs
- [ ] Une requĂȘte DELETE sur
/api/users/:iddevrait supprimer le bon utilisateur dans la base de données
==$==
Ce que tu devrais avoir dans :
// ...
const movieControllers = require("./controllers/movieControllers");
const validateMovie = require("./middlewares/validateMovie");
app.get("/api/movies", movieControllers.getMovies);
app.get("/api/movies/:id", movieControllers.getMovieById);
app.post("/api/movies", validateMovie, movieControllers.createMovie);
app.put("/api/movies/:id", validateMovie, movieControllers.updateMovie);
app.delete("/api/movies/:id", userControllers.deleteMovie);
const userControllers = require("./controllers/userControllers");
const validateUser = require("./middlewares/validateUser");
app.get("/api/users", userControllers.getUsers);
app.get("/api/users/:id", userControllers.getUserById);
app.post("/api/users", validateUser, userControllers.postUser);
app.put("/api/users/:id", validateUser, userControllers.updateUser);
app.delete("/api/users/:id", userControllers.deleteUser);
// ...
// ...
const deleteUser = (req, res) => {
const id = parseInt(req.params.id);
database
.query("delete from users where id = ?", [id])
.then(([result]) => {
if (result.affectedRows === 0) {
res.sendStatus(404);
} else {
res.sendStatus(204);
}
})
.catch((err) => {
console.error(err);
res.sendStatus(500);
});
};
module.exports = {
getUsers,
getUserById,
postUser,
updateUser,
deleteUser,
};
// ...
const deleteMovie = (req, res) => {
const id = parseInt(req.params.id);
database
.query("delete from movies where id = ?", [id])
.then(([result]) => {
if (result.affectedRows === 0) {
res.sendStatus(404);
} else {
res.sendStatus(204);
}
})
.catch((err) => {
console.error(err);
res.sendStatus(500);
});
};
module.exports = {
getMovies,
getMovieById,
postMovie,
updateMovie,
deleteMovie,
};