Bygge GET-endepunktet for Post etter ID
Vi skal utforske implementeringen av "GET POST BY ID"-ruten i postsRoutes.js file-filen. Denne ruten henter og returnerer et spesifikt innlegg basert på dets unike identifikator (id) som oppgis som en del av URL-en.
Merk
Begrepet 'database' refererer spesifikt til filen
posts.jsonsom ligger i mappendatabase.
Rutedefinisjon
Koden under definerer "GET POST BY ID"-ruten ved bruk av router.get():
router.get("/post/:id", async (req, res, next) => { ... }
- Denne ruten er konfigurert for å håndtere HTTP GET-forespørsler;
- Ruteadressen
/post/:idinkluderer en parameter:id, som fanger opp postens ID fra URL-en.
Ekstrahere post-ID
Vi henter postens ID fra forespørselsparametrene ved å bruke req.params.id:
const postId = req.params.id;
Denne linjen fanger opp verdien av :id fra URL-en, og gjør den tilgjengelig for videre behandling.
Finne posten i databasen
Deretter søker vi etter posten med tilsvarende ID i databasen:
const data = await readData();
const post = data.find((post) => post.id === postId);
- Vi bruker den asynkrone funksjonen
readDatafor å hente data fra JSON-filen; - Metoden
find()benyttes for å lokalisere en post med tilsvarende ID i de hentede dataene; - Variabelen
postinneholder den funne posten ellerundefinedhvis ingen treff finnes.
Håndtering av responsen
Responsen håndteres basert på om et innlegg ble funnet eller ikke:
if (!post) {
res.status(404).json({ error: "Post not found" });
} else {
res.status(200).send(post);
}
- Hvis ingen innlegg ble funnet (dvs.
posterundefined), sendes en 404-respons sammen med en feilmelding som indikerer at det forespurte innlegget ikke ble funnet; - Hvis et innlegg ble funnet, sendes innlegget som respons med statuskode 200 (OK).
Feilhåndtering
Rutekoden pakkes inn i en try-catch-blokk for å håndtere potensielle feil under datainnhenting eller forespørselsbehandling. Eventuelle feil som oppstår logges til konsollen for feilsøkingsformål:
try {
// ... (code for retrieving and processing data)
} catch (error) {
console.error(error.message);
}
Komplett kode for postsRoutes.js-filen på dette steget
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);
}
});
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 2.56
Bygge GET-endepunktet for Post etter ID
Sveip for å vise menyen
Vi skal utforske implementeringen av "GET POST BY ID"-ruten i postsRoutes.js file-filen. Denne ruten henter og returnerer et spesifikt innlegg basert på dets unike identifikator (id) som oppgis som en del av URL-en.
Merk
Begrepet 'database' refererer spesifikt til filen
posts.jsonsom ligger i mappendatabase.
Rutedefinisjon
Koden under definerer "GET POST BY ID"-ruten ved bruk av router.get():
router.get("/post/:id", async (req, res, next) => { ... }
- Denne ruten er konfigurert for å håndtere HTTP GET-forespørsler;
- Ruteadressen
/post/:idinkluderer en parameter:id, som fanger opp postens ID fra URL-en.
Ekstrahere post-ID
Vi henter postens ID fra forespørselsparametrene ved å bruke req.params.id:
const postId = req.params.id;
Denne linjen fanger opp verdien av :id fra URL-en, og gjør den tilgjengelig for videre behandling.
Finne posten i databasen
Deretter søker vi etter posten med tilsvarende ID i databasen:
const data = await readData();
const post = data.find((post) => post.id === postId);
- Vi bruker den asynkrone funksjonen
readDatafor å hente data fra JSON-filen; - Metoden
find()benyttes for å lokalisere en post med tilsvarende ID i de hentede dataene; - Variabelen
postinneholder den funne posten ellerundefinedhvis ingen treff finnes.
Håndtering av responsen
Responsen håndteres basert på om et innlegg ble funnet eller ikke:
if (!post) {
res.status(404).json({ error: "Post not found" });
} else {
res.status(200).send(post);
}
- Hvis ingen innlegg ble funnet (dvs.
posterundefined), sendes en 404-respons sammen med en feilmelding som indikerer at det forespurte innlegget ikke ble funnet; - Hvis et innlegg ble funnet, sendes innlegget som respons med statuskode 200 (OK).
Feilhåndtering
Rutekoden pakkes inn i en try-catch-blokk for å håndtere potensielle feil under datainnhenting eller forespørselsbehandling. Eventuelle feil som oppstår logges til konsollen for feilsøkingsformål:
try {
// ... (code for retrieving and processing data)
} catch (error) {
console.error(error.message);
}
Komplett kode for postsRoutes.js-filen på dette steget
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);
}
});
Takk for tilbakemeldingene dine!