Archives Wild Code School
Express.js

Express 04 - đŸ—‘ïž MĂ©thode DELETE et suppression de donnĂ©es

QuĂȘte 7 sur 12 · 1 image archivĂ©e

⚠ Avant de commencer cette quĂȘte, nous te recommandons de jeter un Ɠil Ă  celles-ci :
QuĂȘtes liĂ©es

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 :

http
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 :

javascript
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 :

http
DELETE http://localhost:5000/api/movies/2

À toi de jouer :

quiz
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 ;)

hidden
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/:id qui 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/:id devrait supprimer le bon utilisateur dans la base de donnĂ©es

==$==

Ce que tu devrais avoir dans :

javascript
// ...

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);

// ...
javascript
// ...

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,
};
javascript
// ...

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,
};