Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Creación del Endpoint GET de Publicación por ID | Creación de API REST con Node.js y Express.js
Desarrollo Backend con Node.js y Express.js

Creación del Endpoint GET de Publicación por ID

Desliza para mostrar el menú

Exploración de la implementación de la ruta "GET POST BY ID" dentro del archivo postsRoutes.js file. Esta ruta obtiene y devuelve una publicación específica basada en su identificador único (id) proporcionado como parte de la URL.

Note
Nota

El término 'database' se refiere específicamente al archivo posts.json ubicado en la carpeta database.

Definición de la ruta

El siguiente código define la ruta "GET POST BY ID" utilizando router.get():

router.get("/post/:id", async (req, res, next) => { ... }
  • Esta ruta está configurada para manejar solicitudes HTTP GET;
  • La ruta /post/:id incluye un parámetro :id, que captura el ID de la publicación desde la URL.

Extracción del ID de la publicación

Se extrae el ID de la publicación de los parámetros de la solicitud utilizando req.params.id:

const postId = req.params.id;

Esta línea captura el valor de :id de la URL, poniéndolo a disposición para su posterior procesamiento.

Búsqueda de la publicación en la base de datos

A continuación, se busca la publicación con el ID correspondiente en la base de datos:

const data = await readData();

const post = data.find((post) => post.id === postId);
  • Se utiliza la función asíncrona readData para recuperar los datos del archivo JSON;
  • El método find() se emplea para localizar una publicación con el ID correspondiente dentro de los datos recuperados;
  • La variable post almacena la publicación encontrada o undefined si no se encuentra ninguna coincidencia.

Gestión de la respuesta

La respuesta se gestiona en función de si se encontró o no una publicación:

if (!post) {
  res.status(404).json({ error: "Post not found" });
} else {
  res.status(200).send(post);
}
  • Si no se encontró ninguna publicación (es decir, post es undefined), se envía una respuesta 404 junto con un mensaje de error, indicando que la publicación solicitada no fue encontrada;
  • Si se encontró una publicación, se envía la publicación como respuesta con un código de estado 200 (OK).

Manejo de errores

Se envuelve el código de la ruta en un bloque try-catch para manejar posibles errores durante la recuperación de datos o el procesamiento de la solicitud. Cualquier error que ocurra se registra en la consola para fines de depuración:

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

Código completo del archivo postsRoutes.js en este paso

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);
  }
});
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 6

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 4. Capítulo 6
some-alt