Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Opbygning af GET-endepunktet for Post efter Id | Opbygning af REST API'er med Node.js og Express.js
Backend-Udvikling med Node.js og Express.js

bookOpbygning af GET-endepunktet for Post efter Id

Vi vil undersøge implementeringen af "GET POST BY ID"-ruten i filen postsRoutes.js file. Denne rute henter og returnerer et specifikt opslag baseret på dets unikke identifikator (id), som angives som en del af URL'en.

Bemærk

Udtrykket 'database' henviser specifikt til filen posts.json, som er placeret i mappen database.

Rutedefinition

Koden nedenfor definerer "GET POST BY ID"-ruten ved hjælp af router.get():

router.get("/post/:id", async (req, res, next) => { ... }
  • Denne rute er konfigureret til at håndtere HTTP GET-anmodninger;
  • Rutestien /post/:id indeholder en parameter :id, som opfanger postens ID fra URL'en.

Udtrækning af post-ID

Vi udtrækker postens ID fra anmodningsparametrene ved hjælp af req.params.id:

const postId = req.params.id;

Denne linje opfanger værdien af :id fra URL'en, så den kan bruges til videre behandling.

Søgning efter posten i databasen

Dernæst søger vi efter posten med det tilsvarende ID i databasen:

const data = await readData();

const post = data.find((post) => post.id === postId);
  • Vi bruger den asynkrone funktion readData til at hente data fra JSON-filen;
  • Metoden find() anvendes til at lokalisere en post med et tilsvarende ID i de hentede data;
  • Variablen post indeholder den fundne post eller undefined, hvis ingen match findes.

Håndtering af svaret

Vi håndterer svaret baseret på, om et opslag blev fundet eller ej:

if (!post) {
  res.status(404).json({ error: "Post not found" });
} else {
  res.status(200).send(post);
}
  • Hvis intet opslag blev fundet (dvs. post er undefined), sendes et 404-svar sammen med en fejlmeddelelse, der angiver, at det ønskede opslag ikke blev fundet;
  • Hvis et opslag blev fundet, sendes opslaget som svar med statuskoden 200 (OK).

Fejlhåndtering

Vi indkapsler rute-koden i et try-catch-blok for at håndtere potentielle fejl under datahentning eller anmodningsbehandling. Eventuelle fejl, der opstår, logges til konsollen til fejlsøgning:

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);
  }
});

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 6

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 2.56

bookOpbygning af GET-endepunktet for Post efter Id

Stryg for at vise menuen

Vi vil undersøge implementeringen af "GET POST BY ID"-ruten i filen postsRoutes.js file. Denne rute henter og returnerer et specifikt opslag baseret på dets unikke identifikator (id), som angives som en del af URL'en.

Bemærk

Udtrykket 'database' henviser specifikt til filen posts.json, som er placeret i mappen database.

Rutedefinition

Koden nedenfor definerer "GET POST BY ID"-ruten ved hjælp af router.get():

router.get("/post/:id", async (req, res, next) => { ... }
  • Denne rute er konfigureret til at håndtere HTTP GET-anmodninger;
  • Rutestien /post/:id indeholder en parameter :id, som opfanger postens ID fra URL'en.

Udtrækning af post-ID

Vi udtrækker postens ID fra anmodningsparametrene ved hjælp af req.params.id:

const postId = req.params.id;

Denne linje opfanger værdien af :id fra URL'en, så den kan bruges til videre behandling.

Søgning efter posten i databasen

Dernæst søger vi efter posten med det tilsvarende ID i databasen:

const data = await readData();

const post = data.find((post) => post.id === postId);
  • Vi bruger den asynkrone funktion readData til at hente data fra JSON-filen;
  • Metoden find() anvendes til at lokalisere en post med et tilsvarende ID i de hentede data;
  • Variablen post indeholder den fundne post eller undefined, hvis ingen match findes.

Håndtering af svaret

Vi håndterer svaret baseret på, om et opslag blev fundet eller ej:

if (!post) {
  res.status(404).json({ error: "Post not found" });
} else {
  res.status(200).send(post);
}
  • Hvis intet opslag blev fundet (dvs. post er undefined), sendes et 404-svar sammen med en fejlmeddelelse, der angiver, at det ønskede opslag ikke blev fundet;
  • Hvis et opslag blev fundet, sendes opslaget som svar med statuskoden 200 (OK).

Fejlhåndtering

Vi indkapsler rute-koden i et try-catch-blok for at håndtere potentielle fejl under datahentning eller anmodningsbehandling. Eventuelle fejl, der opstår, logges til konsollen til fejlsøgning:

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);
  }
});

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 6
some-alt