This commit is contained in:
Kajal Thakur 2025-01-16 16:32:48 +05:30
parent 19fd92dffa
commit 534cc5cabc

137
index.js
View File

@ -7,15 +7,30 @@ const PORT = 8080;
// Middleware to parse JSON // Middleware to parse JSON
app.use(bodyParser.json()); app.use(bodyParser.json());
// In-memory data store // In-memory data store for demonstration
let items = []; let items = [];
let currentId = 1; let currentId = 1;
// Middleware to handle dynamic headers
app.use((req, res, next) => {
const dynamicHeaders = req.headers;
req.dynamicHeaders = dynamicHeaders; // Store headers for use in routes
next();
});
// Routes // Routes
// CREATE - Add a new item // CREATE - Add a new item
app.post("/items", (req, res) => { app.post("/items", (req, res) => {
const { name, description } = req.body; const { headers, body, query } = req;
const { stateParams } = req.body; // State parameters passed in body
// Dynamic handling example for headers, query params, and state params
console.log("Headers:", headers);
console.log("Query Params:", query);
console.log("State Params:", stateParams);
const { name, description } = body;
if (!name) { if (!name) {
return res.status(400).json({ error: "Name is required" }); return res.status(400).json({ error: "Name is required" });
@ -23,56 +38,60 @@ app.post("/items", (req, res) => {
const newItem = { id: currentId++, name, description }; const newItem = { id: currentId++, name, description };
items.push(newItem); items.push(newItem);
res.status(201).json(newItem); res.status(201).json({
message: "Item created successfully",
headers: req.dynamicHeaders,
queryParams: query,
stateParams,
item: newItem,
});
}); });
// READ - Get all items // READ - Get all items
app.get("/items", (req, res) => { app.get("/items", (req, res) => {
res.json(items); const { query } = req;
// Filter by query parameters if provided
let filteredItems = items;
if (query.name) {
filteredItems = filteredItems.filter((item) =>
item.name.toLowerCase().includes(query.name.toLowerCase())
);
}
if (query.description) {
filteredItems = filteredItems.filter((item) =>
item.description &&
item.description.toLowerCase().includes(query.description.toLowerCase())
);
}
res.json({
message: "Items retrieved successfully",
headers: req.dynamicHeaders,
queryParams: query,
items: filteredItems,
});
}); });
// READ - Get item by ID // READ - Get an item by ID
app.get("/items/:id", (req, res) => { app.get("/items/:id", (req, res) => {
const { id } = req.params; const { id } = req.params;
const item = items.find((i) => i.id === parseInt(id));
if (!item) {
return res.status(404).json({ error: "Item not found" });
}
res.json(item);
});
// READ - Get items by ID and filter by query parameters
app.get("/items/:id/search", (req, res) => {
const { id } = req.params; // Path parameter
const { name, description } = req.query; // Query parameters
// Find the item by ID
const item = items.find((i) => i.id === parseInt(id)); const item = items.find((i) => i.id === parseInt(id));
if (!item) { if (!item) {
return res.status(404).json({ error: "Item not found" }); return res.status(404).json({ error: "Item not found" });
} }
// Apply query parameter filters res.json({
let filteredDetails = { ...item }; message: "Item retrieved successfully",
headers: req.dynamicHeaders,
// Filter item fields based on query parameters queryParams: req.query,
if (name && !item.name.toLowerCase().includes(name.toLowerCase())) { item,
return res.status(404).json({ error: "Item name does not match query" }); });
}
if (
description &&
(!item.description || !item.description.toLowerCase().includes(description.toLowerCase()))
) {
return res.status(404).json({ error: "Item description does not match query" });
}
res.json(filteredDetails);
}); });
// UPDATE - Update item by ID // UPDATE - Update an item by ID
app.put("/items/:id", (req, res) => { app.put("/items/:id", (req, res) => {
const { id } = req.params; const { id } = req.params;
const { name, description } = req.body; const { name, description } = req.body;
@ -85,46 +104,60 @@ app.put("/items/:id", (req, res) => {
if (name) item.name = name; if (name) item.name = name;
if (description) item.description = description; if (description) item.description = description;
res.json(item); res.json({
message: "Item updated successfully",
headers: req.dynamicHeaders,
stateParams: req.body.stateParams,
updatedItem: item,
});
}); });
// DELETE - Remove item by ID // DELETE - Remove an item by ID
app.delete("/items/:id", (req, res) => { app.delete("/items/:id", (req, res) => {
const { id } = req.params; const { id } = req.params;
const itemIndex = items.findIndex((i) => i.id === parseInt(id));
if (itemIndex === -1) { const index = items.findIndex((i) => i.id === parseInt(id));
if (index === -1) {
return res.status(404).json({ error: "Item not found" }); return res.status(404).json({ error: "Item not found" });
} }
items.splice(itemIndex, 1); items.splice(index, 1);
res.status(204).send(); res.status(204).send({
message: "Item deleted successfully",
headers: req.dynamicHeaders,
});
}); });
// READ - Get items with optional query parameters // READ - Get items with optional dynamic query parameters
app.get("/items/search", (req, res) => { app.get("/items/search", (req, res) => {
const { name, description } = req.query; const { query } = req;
// Filter items based on query parameters // Filter items based on query parameters
let filteredItems = items; let filteredItems = items;
if (name) { if (query.name) {
filteredItems = filteredItems.filter((item) => filteredItems = filteredItems.filter((item) =>
item.name.toLowerCase().includes(name.toLowerCase()) item.name.toLowerCase().includes(query.name.toLowerCase())
); );
} }
if (description) { if (query.description) {
filteredItems = filteredItems.filter((item) => filteredItems = filteredItems.filter(
item.description && (item) =>
item.description.toLowerCase().includes(description.toLowerCase()) item.description &&
item.description.toLowerCase().includes(query.description.toLowerCase())
); );
} }
res.json(filteredItems); res.json({
message: "Filtered items retrieved successfully",
headers: req.dynamicHeaders,
queryParams: query,
items: filteredItems,
});
}); });
// Start server // Start the server
app.listen(PORT, () => { app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`); console.log(`Server is running on http://localhost:${PORT}`);
}); });