Creación del Endpoint GET Post por Id
Exploraremos la implementación de la ruta "GET POST BY ID" dentro del archivo postsRoutes.js file. Esta ruta recupera y devuelve una publicación específica basada en su identificador único (id) proporcionado como parte de la URL.
Nota
El término 'database' se refiere específicamente al archivo
posts.jsonubicado en la carpetadatabase.
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/:idincluye 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 desde 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
readDatapara recuperar 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
postalmacena la publicación encontrada oundefinedsi no se encuentra coincidencia.
Manejo de la respuesta
Se maneja la respuesta según si se encontró una publicación o no:
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,
postesundefined), 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);
}
Complete code of the postsRoutes.js file at this step
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);
}
});
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain how the readData function works in more detail?
What should I do if I get an error when trying to fetch a post by ID?
How can I test this GET POST BY ID route using a tool like Postman?
Awesome!
Completion rate improved to 2.56
Creación del Endpoint GET Post por Id
Desliza para mostrar el menú
Exploraremos la implementación de la ruta "GET POST BY ID" dentro del archivo postsRoutes.js file. Esta ruta recupera y devuelve una publicación específica basada en su identificador único (id) proporcionado como parte de la URL.
Nota
El término 'database' se refiere específicamente al archivo
posts.jsonubicado en la carpetadatabase.
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/:idincluye 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 desde 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
readDatapara recuperar 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
postalmacena la publicación encontrada oundefinedsi no se encuentra coincidencia.
Manejo de la respuesta
Se maneja la respuesta según si se encontró una publicación o no:
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,
postesundefined), 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);
}
Complete code of the postsRoutes.js file at this step
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);
}
});
¡Gracias por tus comentarios!