60 lines
1.6 KiBLFS
JavaScript
60 lines
1.6 KiBLFS
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const products = require('./products.json');
|
|
|
|
const app = express();
|
|
app.use(cors());
|
|
|
|
// Helper for delay
|
|
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
|
|
// Products - 1500ms delay (was 1000ms setTimeout + 500ms API delay)
|
|
app.get('/api/products', async (req, res) => {
|
|
await delay(1500);
|
|
res.json(products);
|
|
});
|
|
|
|
// Banner - 1000ms delay (appears first, pushes content down)
|
|
app.get('/api/banner', async (req, res) => {
|
|
await delay(1000);
|
|
res.json({ text: 'Free shipping on orders over $50!' });
|
|
});
|
|
|
|
// Late Banner - 2500ms delay (appears later, causes second shift)
|
|
app.get('/api/late-banner', async (req, res) => {
|
|
await delay(2500);
|
|
res.json({ text: 'Limited Time Offer: 20% off your first order! Use code WELCOME20' });
|
|
});
|
|
|
|
// Side Pane - 1500ms delay
|
|
app.get('/api/side-pane', async (req, res) => {
|
|
await delay(1500);
|
|
res.json({
|
|
categories: [
|
|
{ name: 'Electronics', href: '#' },
|
|
{ name: 'Clothing', href: '#' },
|
|
{ name: 'Home & Garden', href: '#' },
|
|
{ name: 'Sports', href: '#' },
|
|
{ name: 'Books', href: '#' },
|
|
{ name: 'Toys', href: '#' }
|
|
],
|
|
filters: [
|
|
{ name: 'On Sale', href: '#' },
|
|
{ name: 'New Arrivals', href: '#' },
|
|
{ name: 'Best Sellers', href: '#' },
|
|
{ name: 'Top Rated', href: '#' }
|
|
]
|
|
});
|
|
});
|
|
|
|
// Results Bar - 1600ms delay
|
|
app.get('/api/results-bar', async (req, res) => {
|
|
await delay(1600);
|
|
res.json({ visible: true });
|
|
});
|
|
|
|
const PORT = 4000;
|
|
app.listen(PORT, '0.0.0.0', () => {
|
|
console.log(`API server running on port ${PORT}`);
|
|
});
|