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

bookErstellung des GET-Endpunkts für Beiträge nach ID

In diesem Abschnitt wird die Implementierung der Route "GET POST BY ID" in der Datei postsRoutes.js file behandelt. 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.

Hinweis

Der Begriff 'Datenbank' bezieht sich hier 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 die Verarbeitung von HTTP-GET-Anfragen konfiguriert;
  • Der Routenpfad /post/:id enthält einen Parameter :id, der die Post-ID aus der URL übernimmt.

Extrahieren der Post-ID

Die Post-ID wird aus den Request-Parametern mit req.params.id extrahiert:

const postId = req.params.id;

Diese Zeile übernimmt den Wert von :id aus der URL und stellt ihn für die weitere Verarbeitung bereit.

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;
  • Die Methode find() wird eingesetzt, um einen Post mit passender ID in den abgerufenen Daten zu finden;
  • Die Variable post enthält den gefundenen Post oder undefined, falls keine Übereinstimmung vorliegt.

Behandlung der Antwort

Die Antwort wird abhängig davon behandelt, ob ein Beitrag gefunden wurde oder nicht:

if (!post) {
  res.status(404).json({ error: "Post not found" });
} else {
  res.status(200).send(post);
}
  • Wenn kein Beitrag gefunden wurde (d. h. post ist undefined), wird eine 404-Antwort zusammen mit einer Fehlermeldung gesendet, die darauf hinweist, dass der angeforderte Beitrag nicht gefunden wurde;
  • Wenn ein Beitrag 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 zu behandeln. Alle auftretenden 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

Suggested prompts:

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

bookErstellung des GET-Endpunkts für Beiträge nach ID

Swipe um das Menü anzuzeigen

In diesem Abschnitt wird die Implementierung der Route "GET POST BY ID" in der Datei postsRoutes.js file behandelt. 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.

Hinweis

Der Begriff 'Datenbank' bezieht sich hier 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 die Verarbeitung von HTTP-GET-Anfragen konfiguriert;
  • Der Routenpfad /post/:id enthält einen Parameter :id, der die Post-ID aus der URL übernimmt.

Extrahieren der Post-ID

Die Post-ID wird aus den Request-Parametern mit req.params.id extrahiert:

const postId = req.params.id;

Diese Zeile übernimmt den Wert von :id aus der URL und stellt ihn für die weitere Verarbeitung bereit.

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;
  • Die Methode find() wird eingesetzt, um einen Post mit passender ID in den abgerufenen Daten zu finden;
  • Die Variable post enthält den gefundenen Post oder undefined, falls keine Übereinstimmung vorliegt.

Behandlung der Antwort

Die Antwort wird abhängig davon behandelt, ob ein Beitrag gefunden wurde oder nicht:

if (!post) {
  res.status(404).json({ error: "Post not found" });
} else {
  res.status(200).send(post);
}
  • Wenn kein Beitrag gefunden wurde (d. h. post ist undefined), wird eine 404-Antwort zusammen mit einer Fehlermeldung gesendet, die darauf hinweist, dass der angeforderte Beitrag nicht gefunden wurde;
  • Wenn ein Beitrag 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 zu behandeln. Alle auftretenden 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
some-alt