import fs from 'fs'; const dbJSON = fs.readFileSync(new URL('./db.json', import.meta.url)); const db = JSON.parse(dbJSON); const products = db.products; const productMap = new Map(products.map(product => [product.id, product])); const routes = [ { match: /\/api\/products\/([0-9])+/, async handle(_req, res, [,idStr]) { const id = Number(idStr); if(productMap.has(id)) { const product = productMap.get(id); res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(product)); } else { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not found'); } } }, { match: /\/api\/products/, async handle(_req, res) { res.writeHead(200, { 'Content-Type': 'application/json', }); res.end(JSON.stringify(products)); } } ] export async function apiHandler(req, res) { for(const route of routes) { const match = route.match.exec(req.url); if(match) { return route.handle(req, res, match); } } res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not found'); }