Erstellung des GET-Endpunkts für Beiträge nach ID
Swipe um das Menü anzuzeigen
Implementierung der Route "GET POST BY ID" im postsRoutes.js file-Datei. Diese Route ruft einen bestimmten Beitrag anhand seiner eindeutigen Kennung (id) ab und gibt ihn zurück, wobei die Kennung als Teil der URL übergeben wird.
Der Begriff 'database' bezieht sich speziell auf die Datei posts.json im Ordner database.
Routen-Definition
Der folgende Code definiert die Route "GET POST BY ID" mit router.get():
router.get("/post/:id", async (req, res, next) => { ... }
- Diese Route ist für HTTP-GET-Anfragen konfiguriert;
- Der Routenpfad
/post/:identhält einen Parameter:id, der die Beitrags-ID aus der URL übernimmt.
Extrahieren der Post-ID
Die Post-ID wird aus den Anfrageparametern mit req.params.id extrahiert:
const postId = req.params.id;
Diese Zeile erfasst den :id-Wert aus der URL und macht ihn für die weitere Verarbeitung verfügbar.
Suchen des Posts in der Datenbank
Anschließend wird nach dem Post mit der passenden ID in der Datenbank gesucht:
const data = await readData();
const post = data.find((post) => post.id === postId);
- Die asynchrone Funktion
readDatawird verwendet, um Daten aus der JSON-Datei abzurufen; - Mit der Methode
find()wird ein Post mit passender ID innerhalb der abgerufenen Daten gesucht; - Die Variable
postenthält den gefundenen Post oderundefined, falls kein Treffer vorliegt.
Verarbeiten der Antwort
Die Antwort wird abhängig davon verarbeitet, ob ein Post gefunden wurde oder nicht:
if (!post) {
res.status(404).json({ error: "Post not found" });
} else {
res.status(200).send(post);
}
- Falls kein Post gefunden wurde (d. h.
postistundefined), wird eine 404-Antwort mit einer Fehlermeldung gesendet, die darauf hinweist, dass der angeforderte Post nicht gefunden wurde; - Falls ein Post gefunden wurde, wird dieser mit dem Statuscode 200 (OK) als Antwort gesendet.
Fehlerbehandlung
Der Routencode wird in einen try-catch-Block eingebettet, um potenzielle Fehler bei der Datenabfrage oder der Verarbeitung der Anfrage abzufangen. Auftretende Fehler werden zur Fehlersuche in der Konsole protokolliert:
try {
// ... (code for retrieving and processing data)
} catch (error) {
console.error(error.message);
}
Vollständiger Code der Datei postsRoutes.js in diesem Schritt
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);
}
});
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen