Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Erstellung des GET-Endpunkts für Beiträge nach ID | Erstellung von REST-APIs mit Node.js und Express.js
Backend-Entwicklung mit Node.js und Express.js

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.

Note
Hinweis

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/:id enthä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 readData wird 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 post enthält den gefundenen Post oder undefined, 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. post ist undefined), 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);
  }
});
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 4. Kapitel 6
some-alt