crud
This commit is contained in:
parent
19fd92dffa
commit
534cc5cabc
137
index.js
137
index.js
|
|
@ -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}`);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user