Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Implémentation de la Route "Update Post by ID" | Développement d'API REST
Développement Backend Avec Node.js et Express.js

book
Implémentation de la Route "Update Post by ID"

Nous allons étudier comment mettre à jour un post existant en utilisant la route "UPDATE POST BY ID" dans le fichier postsRoutes.js. Cette route gère la mise à jour d'un post basé sur son ID unique.

Définition de la Route

Le code ci-dessous définit la route "UPDATE POST BY ID" en utilisant router.put():

js
router.put("/post/:id", validatePostData, async (req, res, next) => { ... }
  • Cette route est configurée pour gérer les requêtes HTTP PUT, spécifiquement pour la mise à jour des posts;

  • Elle inclut un :id paramétré dans le chemin de la route pour identifier le post à mettre à jour;

  • Le middleware validatePostData est ajouté pour assurer la validation des données avant de procéder. La logique du middleware validatePostData reste la même que dans l'étape précédente.

Obtention des données de la requête

Ici, nous extrayons les données nécessaires de la requête, y compris l'ID du post et le contenu mis à jour du post :

js
const postId = req.params.id;
const updatedData = {
username: req.body.username,
postTitle: req.body.postTitle,
postContent: req.body.postContent,
};
  • L'ID du post est extrait des paramètres de la requête, le rendant disponible pour un traitement ultérieur. Le paramètre :id de l'URL de la route est capturé en utilisant req.params.id;

  • Les username, postTitle et postContent sont extraits du corps de la requête.

Mettre à jour le post dans la base de données

La mise à jour d'un post existant implique plusieurs étapes, comme décrit ci-dessous :

js
const data = await readData();

const postIndex = data.findIndex((post) => post.id === postId);

if (postIndex === -1) {
return res.status(404).json({ error: "Post not found" });
}

data[postIndex] = {
...data[postIndex],
...updatedData,
};

await fs.writeFile("./database/posts.json", JSON.stringify(data));
  • Nous lisons les données existantes à partir du fichier JSON en utilisant la fonction asynchrone readData, comme expliqué précédemment;

  • La variable postIndex stocke l'index du post à mettre à jour dans le tableau data en comparant les IDs des posts;

  • Si le post n'est pas trouvé (c'est-à-dire postIndex === -1), une réponse 404 (Non trouvé) avec un message d'erreur est renvoyée au client;

  • Pour mettre à jour les données du post, nous fusionnons les données existantes du post (...data[postIndex]) avec les données mises à jour (...updatedData). Cela garantit que seuls les champs spécifiés sont mis à jour et que les données existantes sont conservées;

  • Enfin, le tableau data mis à jour est réécrit dans le fichier JSON pour enregistrer les modifications apportées au post.

Envoi d'une réponse

Après la mise à jour réussie du post, une réponse JSON est envoyée au client. La réponse inclut un code de statut 200 (OK), indiquant une mise à jour réussie et les données du post mis à jour.

js
res.status(200).json(data[postIndex]);

Gestion des erreurs

Nous enveloppons le code de la route dans un bloc try-catch pour gérer les erreurs potentielles lors de la récupération des données ou du traitement des requêtes. Toutes les erreurs qui se produisent sont enregistrées dans la console à des fins de débogage :

js
try {
// ... (code for retrieving and processing data)
} catch (error) {
console.error(error.message);
}

Code complet du fichier postsRoutes.js à cette étape

js
const express = require("express");
const fs = require("fs/promises");
const validatePostData = require("../middlewares/validateData");

const router = express.Router();

// Function to read data from the JSON file
async function readData() {
try {
// Read the contents of the `posts.json` file
const data = await fs.readFile("./database/posts.json");
// Parse the JSON data into a JavaScript object
return JSON.parse(data);
} catch (error) {
// If an error occurs during reading or parsing, throw the error
throw error;
}
}

// GET ALL POSTS
router.get("/", async (req, res, next) => {
try {
// Call the `readData` function to retrieve the list of posts
const data = await readData();
// Send the retrieved data as the response
res.status(200).send(data);
} catch (error) {
// If an error occurs during data retrieval or sending the response
console.error(error.message); // Log the error to the console for debugging
}
});

// GET POST BY ID
router.get("/post/:id", async (req, res, next) => {
try {
// Extract the post ID from the request parameters

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 8

Demandez à l'IA

expand
ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

some-alt