Opbygning 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 mappendatabase.
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/:idindeholder 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
readDatatil at hente data fra JSON-filen; - Metoden
find()anvendes til at lokalisere en post med et tilsvarende ID i de hentede data; - Variablen
postindeholder den fundne post ellerundefined, 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.
posterundefined), 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);
}
});
Tak for dine kommentarer!
Spørg AI
Spørg AI
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
Opbygning 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 mappendatabase.
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/:idindeholder 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
readDatatil at hente data fra JSON-filen; - Metoden
find()anvendes til at lokalisere en post med et tilsvarende ID i de hentede data; - Variablen
postindeholder den fundne post ellerundefined, 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.
posterundefined), 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);
}
});
Tak for dine kommentarer!