diff options
Diffstat (limited to 'examples/ssr/server/api.mjs')
-rw-r--r-- | examples/ssr/server/api.mjs | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/examples/ssr/server/api.mjs b/examples/ssr/server/api.mjs deleted file mode 100644 index 589766ee9..000000000 --- a/examples/ssr/server/api.mjs +++ /dev/null @@ -1,100 +0,0 @@ -import fs from 'fs'; -import lightcookie from 'lightcookie'; - -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])); - -// Normally this would be in a database. -const userCartItems = new Map(); - -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)); - }, - }, - { - match: /\/api\/cart/, - async handle(req, res) { - res.writeHead(200, { - 'Content-Type': 'application/json', - }); - let cookie = req.headers.cookie; - let userId = cookie ? lightcookie.parse(cookie)['user-id'] : '1'; // default for testing - if (!userId || !userCartItems.has(userId)) { - res.end(JSON.stringify({ items: [] })); - return; - } - let items = userCartItems.get(userId); - let array = Array.from(items.values()); - res.end(JSON.stringify({ items: array })); - }, - }, - { - match: /\/api\/add-to-cart/, - async handle(req, res) { - let body = ''; - req.on('data', (chunk) => (body += chunk)); - return new Promise((resolve) => { - req.on('end', () => { - let cookie = req.headers.cookie; - let userId = lightcookie.parse(cookie)['user-id']; - let msg = JSON.parse(body); - - if (!userCartItems.has(userId)) { - userCartItems.set(userId, new Map()); - } - - let cart = userCartItems.get(userId); - if (cart.has(msg.id)) { - cart.get(msg.id).count++; - } else { - cart.set(msg.id, { id: msg.id, name: msg.name, count: 1 }); - } - - res.writeHead(200, { - 'Content-Type': 'application/json', - }); - res.end(JSON.stringify({ ok: true })); - }); - }); - }, - }, -]; - -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'); -} |