 Construindo o Endpoint DELETE de Post por ID
Construindo o Endpoint DELETE de Post por ID
Vamos explorar a implementação da rota "DELETE POST BY ID" dentro do arquivo postsRoutes.js. Essa rota permite que os clientes excluam uma postagem específica fornecendo seu ID exclusivo.
Definição da Rota
O código abaixo define a rota "DELETE POST BY ID" utilizando router.delete():
router.delete("/post/:id", async (req, res, next) => { ... }
Essa rota lida com requisições HTTP DELETE com um parâmetro :id no caminho da rota. O parâmetro :id é utilizado para identificar a postagem a ser excluída. Não é necessário middleware adicional como dataValidation, pois todas as informações necessárias são obtidas a partir do parâmetro da URL.
Extração do ID da Postagem
Extraímos o ID da postagem dos parâmetros da requisição utilizando req.params.id:
const postId = req.params.id;
Essa linha captura o valor de :id da URL, permitindo que ele seja utilizado no código subsequente.
Excluir o Post
Veja como excluir o post:
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.splice(postIndex, 1);
await fs.writeFile("./database/posts.json", JSON.stringify(data));
- Inicialmente, os dados existentes são lidos do arquivo JSON utilizando a função assíncrona readData, conforme explicado anteriormente.
- O índice do post a ser excluído é localizado no array datapor meio da comparação dos IDs dos posts.
- Caso o post não seja encontrado (ou seja, postIndex === -1), uma resposta 404 (Não Encontrado) é retornada com uma mensagem de erro.
- Utilizando o método splice, os dados do post são removidos do arraydata. A variávelpostIndexdetermina a posição do post a ser excluído.
- O array dataatualizado, já sem o post, é gravado novamente no arquivo JSON para salvar as alterações realizadas durante a exclusão.
Envio de Resposta
Uma resposta JSON com o código de status 200 (OK) é enviada ao cliente, indicando que a exclusão foi realizada com sucesso. A resposta inclui uma mensagem confirmando que o post foi excluído com êxito:
res.status(200).json({ message: "Post deleted successfully" });
Tratamento de Erros
O código da rota é envolvido em um bloco try-catch para tratar possíveis erros durante a recuperação dos dados ou o processamento da requisição. Quaisquer erros que ocorram são registrados no console para fins de depuração:
try {
  // ... (code for retrieving and processing data)
} catch (error) {
  console.error(error.message);
}
Código completo do arquivo postsRoutes.js nesta etapa
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
    const postId = req.params.id;
    // Read data from the JSON file
    const data = await readData();
    // Find the post with the matching ID
    const post = data.find((post) => post.id === postId);
    // If the post is not found, send a 404 response
    if (!post) {
      res.status(404).json({ error: "Post not found" });
    } else {
      // If the post is found, send it as the response
      res.status(200).send(post);
    }
  } catch (error) {
    // Handle errors by logging them and sending an error response
    console.error(error.message);
  }
});
// CREATE POST
router.post("/", validatePostData, async (req, res, next) => {
  try {
    const newPost = {
      id: Date.now().toString(), // Generate a unique ID for the new post
      username: req.body.username,
      postTitle: req.body.postTitle,
      postContent: req.body.postContent,
    };
    // Read the existing data
    const data = await readData();
    // Add the new post to the data
    data.push(newPost);
    // Write the updated data back to the JSON file
    await fs.writeFile("./database/posts.json", JSON.stringify(data));
    // Send a success response with the new post
    res.status(201).json(newPost);
  } catch (error) {
    // Handle errors by logging them to the console
    console.error(error.message);
  }
});
// UPDATE POST BY ID
router.put("/post/:id", validatePostData, async (req, res, next) => {
  try {
    // Extract the post ID from the request parameters
    const postId = req.params.id;
    // Extract the updated data from the request body
    const updatedData = {
      username: req.body.username,
      postTitle: req.body.postTitle,
      postContent: req.body.postContent,
    };
    // Read the existing data
    const data = await readData();
    // Find the index of the post with the specified ID in the data array
    const postIndex = data.findIndex((post) => post.id === postId);
    // If the post with the specified ID doesn't exist, return a 404 error
    if (postIndex === -1) {
      return res.status(404).json({ error: "Post not found" });
    }
    // Update the post data with the new data using spread syntax
    data[postIndex] = {
      ...data[postIndex], // Keep existing data
      ...updatedData, // Apply updated data
    };
    // Write the updated data back
    await fs.writeFile("./database/posts.json", JSON.stringify(data));
    // Send a success response with the updated post
    res.status(200).json(data[postIndex]);
  } catch (error) {
    console.error(error.message);
    next(error);
  }
});
// DELETE POST BY ID
router.delete("/post/:id", async (req, res, next) => {
  try {
    // Extract the post ID from the request parameters
    const postId = req.params.id;
    // Read the existing data
    const data = await readData();
    // Find the index of the post with the specified ID in the data array
    const postIndex = data.findIndex((post) => post.id === postId);
    // If the post with the specified ID doesn't exist, return a 404 error
    if (postIndex === -1) {
      return res.status(404).json({ error: "Post not found" });
    }
    // Remove the post from the data array using `splice`
    data.splice(postIndex, 1);
    // Write the updated data back to the data source (e.g., a JSON file)
    await fs.writeFile("./database/posts.json", JSON.stringify(data));
    // Send a success response with the JSON response indicating successful deletion
    res.status(200).json({ message: "Post deleted successfully" });
  } catch (error) {
    console.error(error.message);
    next(error);
  }
});
module.exports = router;
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 2.56 Construindo o Endpoint DELETE de Post por ID
Construindo o Endpoint DELETE de Post por ID
Deslize para mostrar o menu
Vamos explorar a implementação da rota "DELETE POST BY ID" dentro do arquivo postsRoutes.js. Essa rota permite que os clientes excluam uma postagem específica fornecendo seu ID exclusivo.
Definição da Rota
O código abaixo define a rota "DELETE POST BY ID" utilizando router.delete():
router.delete("/post/:id", async (req, res, next) => { ... }
Essa rota lida com requisições HTTP DELETE com um parâmetro :id no caminho da rota. O parâmetro :id é utilizado para identificar a postagem a ser excluída. Não é necessário middleware adicional como dataValidation, pois todas as informações necessárias são obtidas a partir do parâmetro da URL.
Extração do ID da Postagem
Extraímos o ID da postagem dos parâmetros da requisição utilizando req.params.id:
const postId = req.params.id;
Essa linha captura o valor de :id da URL, permitindo que ele seja utilizado no código subsequente.
Excluir o Post
Veja como excluir o post:
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.splice(postIndex, 1);
await fs.writeFile("./database/posts.json", JSON.stringify(data));
- Inicialmente, os dados existentes são lidos do arquivo JSON utilizando a função assíncrona readData, conforme explicado anteriormente.
- O índice do post a ser excluído é localizado no array datapor meio da comparação dos IDs dos posts.
- Caso o post não seja encontrado (ou seja, postIndex === -1), uma resposta 404 (Não Encontrado) é retornada com uma mensagem de erro.
- Utilizando o método splice, os dados do post são removidos do arraydata. A variávelpostIndexdetermina a posição do post a ser excluído.
- O array dataatualizado, já sem o post, é gravado novamente no arquivo JSON para salvar as alterações realizadas durante a exclusão.
Envio de Resposta
Uma resposta JSON com o código de status 200 (OK) é enviada ao cliente, indicando que a exclusão foi realizada com sucesso. A resposta inclui uma mensagem confirmando que o post foi excluído com êxito:
res.status(200).json({ message: "Post deleted successfully" });
Tratamento de Erros
O código da rota é envolvido em um bloco try-catch para tratar possíveis erros durante a recuperação dos dados ou o processamento da requisição. Quaisquer erros que ocorram são registrados no console para fins de depuração:
try {
  // ... (code for retrieving and processing data)
} catch (error) {
  console.error(error.message);
}
Código completo do arquivo postsRoutes.js nesta etapa
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
    const postId = req.params.id;
    // Read data from the JSON file
    const data = await readData();
    // Find the post with the matching ID
    const post = data.find((post) => post.id === postId);
    // If the post is not found, send a 404 response
    if (!post) {
      res.status(404).json({ error: "Post not found" });
    } else {
      // If the post is found, send it as the response
      res.status(200).send(post);
    }
  } catch (error) {
    // Handle errors by logging them and sending an error response
    console.error(error.message);
  }
});
// CREATE POST
router.post("/", validatePostData, async (req, res, next) => {
  try {
    const newPost = {
      id: Date.now().toString(), // Generate a unique ID for the new post
      username: req.body.username,
      postTitle: req.body.postTitle,
      postContent: req.body.postContent,
    };
    // Read the existing data
    const data = await readData();
    // Add the new post to the data
    data.push(newPost);
    // Write the updated data back to the JSON file
    await fs.writeFile("./database/posts.json", JSON.stringify(data));
    // Send a success response with the new post
    res.status(201).json(newPost);
  } catch (error) {
    // Handle errors by logging them to the console
    console.error(error.message);
  }
});
// UPDATE POST BY ID
router.put("/post/:id", validatePostData, async (req, res, next) => {
  try {
    // Extract the post ID from the request parameters
    const postId = req.params.id;
    // Extract the updated data from the request body
    const updatedData = {
      username: req.body.username,
      postTitle: req.body.postTitle,
      postContent: req.body.postContent,
    };
    // Read the existing data
    const data = await readData();
    // Find the index of the post with the specified ID in the data array
    const postIndex = data.findIndex((post) => post.id === postId);
    // If the post with the specified ID doesn't exist, return a 404 error
    if (postIndex === -1) {
      return res.status(404).json({ error: "Post not found" });
    }
    // Update the post data with the new data using spread syntax
    data[postIndex] = {
      ...data[postIndex], // Keep existing data
      ...updatedData, // Apply updated data
    };
    // Write the updated data back
    await fs.writeFile("./database/posts.json", JSON.stringify(data));
    // Send a success response with the updated post
    res.status(200).json(data[postIndex]);
  } catch (error) {
    console.error(error.message);
    next(error);
  }
});
// DELETE POST BY ID
router.delete("/post/:id", async (req, res, next) => {
  try {
    // Extract the post ID from the request parameters
    const postId = req.params.id;
    // Read the existing data
    const data = await readData();
    // Find the index of the post with the specified ID in the data array
    const postIndex = data.findIndex((post) => post.id === postId);
    // If the post with the specified ID doesn't exist, return a 404 error
    if (postIndex === -1) {
      return res.status(404).json({ error: "Post not found" });
    }
    // Remove the post from the data array using `splice`
    data.splice(postIndex, 1);
    // Write the updated data back to the data source (e.g., a JSON file)
    await fs.writeFile("./database/posts.json", JSON.stringify(data));
    // Send a success response with the JSON response indicating successful deletion
    res.status(200).json({ message: "Post deleted successfully" });
  } catch (error) {
    console.error(error.message);
    next(error);
  }
});
module.exports = router;
Obrigado pelo seu feedback!