summaryrefslogtreecommitdiff
path: root/examples/ssr/server/api.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/ssr/server/api.mjs')
-rw-r--r--examples/ssr/server/api.mjs49
1 files changed, 49 insertions, 0 deletions
diff --git a/examples/ssr/server/api.mjs b/examples/ssr/server/api.mjs
new file mode 100644
index 000000000..3928d0507
--- /dev/null
+++ b/examples/ssr/server/api.mjs
@@ -0,0 +1,49 @@
+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');
+}